博客
关于我
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/

你可能感兴趣的文章
PyQt5教程——组件(7)
查看>>
Pytest monkeypatch不适用于导入的函数
查看>>
Pytest 命令行报错: Hint: make sure your test modules/packages have valid Python names.
查看>>
pytest 的 request fixture:实现个性化测试需求
查看>>
Pytest+Allure 接口自动化测试平台开发实战
查看>>
pytest+allure使用动态级别,参数化severity
查看>>
Pytest+Unittest+Git+Jenkins企业级CICD自动化测试平台建设方案
查看>>
Pytest+Yaml 数据驱动测试用例
查看>>
pytest-base-url插件之配置可选的项目系统URL
查看>>
pytest-xdist 进行多进程并发测试!
查看>>
pytest-xdist:远程多主机 - 分布式运行自动化测试
查看>>
Pytest中进行测试环境切换:pytest_addoption!
查看>>
pytest利用request fixture实现个性化测试需求详解
查看>>
pytest单元测试实战
查看>>
pytest单元测试框架
查看>>
Pytest参数详解 — 基于命令行模式
查看>>
pytorch cv2 plt transforms pause waitforbuttonpress一个完整的图片处理程序
查看>>
pytest学习和使用 - Pytest用例执行结果有哪几种状态?
查看>>
pytest实战技巧之参数化应用!
查看>>
Pytest实践:Python测试技术基础知识!
查看>>