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)
分类:Python 时间:2012-12-10 人气:11
本文关键词: python matplotlib
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.028 (s). 12 q(s)