设为首页 加入收藏

TOP

Python Shell下使用matplotlib
2014-11-24 03:08:19 来源: 作者: 【 】 浏览:1
Tags:Python Shell 使用 matplotlib

目录:


Python Shell下使用matplotlib
1 救星Ipython
2 其它pyton解释器
3 控制交互式更新


matplotlib默认是延迟绘图直到脚本结束,因为绘图是一个高代价的操作。所以可能不想每次每个属性的改变就更新绘图,只有所有的属性都改变了才更新。


但是,当在python shell上工作时,你通常想图形根据每个命令如改变xlabel()或者线条标识类型时都更新。概念上这是很简单的,但是在实际中确实很复杂,因为matplotlib本质上是图形用户接口应用程序,所以有很多技巧来使matplotlib在python shell上工作的很好。


1 救星Ipython


幸运的是,ipython,增强的交互式python shell.有很多技巧和matplotlib提醒,所以你可以用pylab模式启动ipython。


Welcome to pylab, a matplotlib-based Python environment.
For more information, type 'help(pylab)'.


In [1]: x = randn(10000)


In [2]: hist(x, 100)


它会如你所期待的那样做了很多交互式绘图工作。调用figure(),就会弹出视图窗口;调用plot(),你的数据就会显示在视图窗口上。


注意在上面的示例中,我们并没有导入任何matplotlib包,因为这是在pylab模式下,ipython会自动把它们导入进来。ipython会为你打开交互式模式,这会导致pyplot命令触发视图窗口更新,同时提供了matplotlib提醒run命令来有效运行脚本。ipython会关闭交互式模式当运行run命令时,然后在运行完毕使恢复到交互式模式的状态,你又可以继续手动操作视图窗口。


在pylab模式的支持下,ipython己经为嵌入到图形用户接口应用程序做了很多工作,可以在Ipython邮件列表里查看最新状态。


2 其它pyton解释器


如果你没有使用ipython,但是还想使用matplotlib/pylab模式在交互式python shell上。如标准python交互式解释器,或者你喜欢的IDE下的解释器,你应该了解什么是matplotlib的后端(什么是后端?)


设置为TkAgg后端就可以使用Tkinter的用户接口工具箱,你也使用matplotlib在任意的python shell,仅仅需要设置你的后端和交互式模式 backend : TkAgg, interactive : True在你的matplotlibrc文件(查看定制matplotlib),然后启动python.


>>> from pylab import *
>>> plot([1, 2, 3])
>>> xlabel('hi mom')


就可以即开即用。注意在批处理模式,如从脚本中创建视图窗口,交互模式可能很慢,因为它会为每个命令重绘。所以在设置这个为默认行为时前,请考虑清楚。
对于其它的用户接口工具箱和对应的matplotlib后端,这种情形很复杂,因为GUI的mainloop会占用整个处理过程。解决方案就是使用单独的线程运行图形界面,这就是ipython很聪明的解决matplotlib支持的大多数包的方式。据报道说,pygtk的后继版本可以很好的支持标准python shell,这是太好了!


3 控制交互式更新


pyplot接口的交互式属性控制着是否视图窗口绘图面板在每个pyplot命令都绘制。如果interactive设置为False,视图窗口会在每个绘图命令都更新,但是只会在显示调用draw()命令之后才会绘制。如果interactive设置为True,每个pyplot命令都会重新绘制。


pyplot接口提供了4个有用命令来控制交互式
isinteractive()返回interactive的设置True| False
ion() 打开交互式模式
ioff() 关闭交互式模式
draw() 强制视图窗口重绘


当处理大数据,要绘图的代价很大时,你可能想关闭matplotlib的交互式设置来提供性能:


>>> ioff()
>>> title("now how much would you pay")
>>> xticklabel(fontsize=20, color='green')
>>> draw()
>>> savefig('alldone', dpi=300)
>>> close()
>>> ion()
>>> plot(rand(20), mfc='g', mec='r', ms=40, mew=4, ls='--', lw=3)


相关阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python如何使基于Java的StubHub受.. 下一篇Linux 下smi/mdio总线通信

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)