博客
关于我
Python Shell下使用matplotlib
阅读量:798 次
发布时间:2023-03-06

本文共 2055 字,大约阅读时间需要 6 分钟。

Python Shell 下使用 matplotlib

创建时间:2012年12月10日

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

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

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

6.2 其他 Python 解释器

如果你没有使用 ipython,但仍想使用 matplotlib/pylab 模式在交互式 Python Shell 上工作。你应该了解什么是 matplotlib 的后端(什么是后端?)。

设置为 TkAgg 后端就可以使用 Tkinter 的用户接口工具箱,你也可以在任意的 Python Shell 中使用 matplotlib,只需要设置你的后端为 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)

转载地址:http://ihafk.baihongyu.com/

你可能感兴趣的文章
Python scrapy 常见问题及解决 【遇到的坑】
查看>>
Python Seborn热图数据的动态更新
查看>>
Python Seborn绘制空白直方图
查看>>
Python Selenium - 获取href值
查看>>
Python Selenium实现自动化测试及Chrome驱动使用!
查看>>
Python Selenium搭建UI自动化测试框架
查看>>
Python Selenium模块详解
查看>>
Python selenium爬取影评生成词云图
查看>>
python selenium自动化测试报告
查看>>
Python selenium自动化测试框架实战 —— 登录测试案例
查看>>
Python Selenium设计模式 —— POM
查看>>
Python Serial:如何使用 read 或 readline 函数一次读取多个字符
查看>>
Python set([]) 如何检查两个对象是否相等?一个对象需要定义哪些方法来自定义它?
查看>>
Python setup.py:数据文件无法复制目录:不存在或不是常规文件
查看>>
Python setuptools sdist:仅安装版本化文件
查看>>
Python Shell下使用matplotlib
查看>>
Python Slice How-to,我知道Python Slice,但我怎么才能使用内置的Slice对象呢?
查看>>
python socket分包发送数据
查看>>
python socket模块_Python socket模块实现TCP服务端客户端
查看>>
Python SOCKS5代理客户端HTTPS
查看>>