python bashplotlib_Python Shell下使用matplotlib

Python Shell下使用matplotlib

Created Monday 10 December 2012

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

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

6.1 救星Ipython

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

johnh@flag:~> ipython -pylab

Python 2.4.5 (#4, Apr 12 2008, 09:09:16)

IPython 0.9.0 -- An enhanced Interactive Python.

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邮件列表里查看最新状态。

6.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,这是太好了!

6.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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值