在 Python shell 中使用 Matplotlib

原文:Using matplotlib in a python shell

译者:飞龙

协议:CC BY-NC-SA 4.0

警告

该页面的内容已严重过时。

默认情况下,matplotlib 将绘图延迟到脚本结束,因为绘图可能是开销大的操作,并且你可能不想在每次更改单个属性时更新绘图,而是只在所有属性更改后更新一次。

但是在 python shell 中工作时,通常需要用每个命令更新绘图,例如,在更改xlabel()或一行的标记样式之后。 虽然这在概念上很简单,但在实践中它可能很棘手,因为 matplotlib 在底层是一个图形用户界面应用程序,并拥有一些技巧,使应用程序在一个 python shell 正常工作。

使用 IPython 解决

注意

这里描述的模式出于历史原因仍然存在,但强烈建议不要使用。它污染函数的命名空间,会影响 python 内建设施,并可能导致错误难以跟踪。 要获得 IPython 集成而无需导入,使用%matplotlib魔术命令是首个选择。 参见 ipython 文档。

幸运的是,一个增强的交互式 python shell,ipython 已经找出了所有这些技巧,并且可被 matplotlib 感知,所以当你在 pylab 模式下启动 ipython。

johnh@flag:~> ipython
Python 2.4.5 (#4, Apr 12 2008, 09:09:16)
IPython 0.9.0 -- An enhanced Interactive Python.In [1]: %pylabWelcome to pylab, a matplotlib-based Python environment.For more information, type 'help(pylab)'.In [2]: x = randn(10000)In [3]: hist(x, 100)

它为你设置一切使交互式绘图工作,就像你期望的那样。 调用figure()并弹出图形窗口,调用plot()使你的数据出现在图形窗口中。

注意在上面的例子中,我们没有导入任何 matplotlib 名称,因为在 pylab 模式下,ipython 将自动导入它们。 ipython 还为你启用交互模式,这会导致每个 pyplot 命令触发图形更新,并且还提供了一个 matplotlib 感知的运行命令,来高效运行 matplotlib 脚本。 ipython 在运行命令期间关闭交互模式,然后在运行结束时恢复交互状态,以便你可以手动继续调整图形。

ipython 已经嵌入了很多最近的作品,从 pylab 支持,到各种 GUI 应用程序,所以请检查 ipython 邮件列表的最新状态。

其它 Python 解释器

如果你不能使用 ipython,并且仍然想在交互式 python shell 使用 matplotlib/pylab,例如,plain-ole 标准的 python 交互式解释器,你将需要了解什么是 matplotlib 后端 。

有了 TkAgg 后端,它使用 Tkinter 用户界面工具包,你可以从任意的非 gui python shell 使用 matplotlib。 只需在你的matplotlibrc文件中设置backend : TkAgginteractive : True(请参阅自定义 matplotlib)并启动 python。 然后:

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

应该能够开箱即用。 这也可能适用于最新版本的 qt4agg 和 gtkagg 后端,以及 Macintosh 上的 macosx 后端。 注意,在批处理模式下,即从脚本制作图形时,交互模式可能很慢,因为它用每个命令重绘图形。 因此,你可能需要仔细考虑,然后通过matplotlibrc文件而不是使用下一节中列出的函数,使其作为默认行为。

Gui shell 问题最多,因为它们必须运行主循环,但是交互式绘图也涉及主循环。 Ipython 已经为 matplotlib 主后端解决了这一切问题。 可能有其他 shell 和 IDE 也可以在交互模式下使用 matplotlib,但一个明显的候选项不会:python IDLE IDE 是一个不支持 pylab 交互模式的 Tkinter gui 应用程序,无论后端是什么。

控制交互式更新

pyplot接口的interactive属性控制是否在每个pyplot命令上绘制图画布。 如果interactiveFalse,那么每个plot命令都会更新图形状态,但只会在显式调用draw()时绘制。 当interactiveTrue时,每个pyplot命令都会触发绘制。

pyplot接口提供了 4 个有助于交互式控制的命令。

isinteractive()

返回交互式设置。True|False

ion()

将交互式模式打开。

ioff()

将交互式模式关闭。

draw()

强制图形重新绘制。

当处理绘图开销很大的大型图形时,你可能希望临时关闭 matplotlib 的交互式设置来避免性能损失:

>>> #create big-expensive-figure
>>> ioff()      # turn updates off
>>> title('now how much would you pay?')
>>> xticklabels(fontsize=20, color='green')
>>> draw()      # force a draw
>>> savefig('alldone', dpi=300)
>>> close()
>>> ion()      # turn updating back on
>>> plot(rand(20), mfc='g', mec='r', ms=40, mew=4, ls='--', lw=3)

Matplotlib 中文用户指南 7.2 Python shell 中使用 Matplotlib相关推荐

  1. python bashplotlib_Matplotlib 中文用户指南 7.2 Python shell 中使用 Matplotlib

    在 Python shell 中使用 Matplotlib 译者:飞龙 警告 该页面的内容已严重过时. 默认情况下,matplotlib 将绘图延迟到脚本结束,因为绘图可能是开销大的操作,并且你可能不 ...

  2. Matplotlib 中文用户指南 1 简介

    简介 原文:Introduction 译者:飞龙 协议:CC BY-NC-SA 4.0 Matplotlib 是一个用于在 Python 中绘制数组的 2D 图形库.虽然它起源于模仿 MATLAB®[ ...

  3. Matplotlib 中文用户指南 2 安装

    安装 原文:Installing 译者:飞龙 协议:CC BY-NC-SA 4.0 有许多安装 matplotlib 的不同方法,最好的方法取决于你使用的操作系统,已经安装的内容以及如何使用它. 为了 ...

  4. Matplotlib 中文用户指南 3.5 艺术家教程

    艺术家教程 原文:Artist tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 matplotlib API 有三个层级. matplotlib.backend_bases.Fig ...

  5. Matplotlib 中文用户指南 3.2 图像教程

    图像教程 原文:Image tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 启动命令 首先,让我们启动 IPython. 它是 Python 标准提示符的最好的改进,它与 Matp ...

  6. Matplotlib 中文用户指南 3.1 pyplot 教程

    pyplot 教程 原文:Pyplot tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 matplotlib.pyplot是一个命令风格函数的集合,使matplotlib的机制更像 ...

  7. Matplotlib 中文用户指南 4.7 使用 LaTeX 渲染文本

    使用 LaTeX 渲染文本 原文:Text rendering With LaTeX 译者:飞龙 协议:CC BY-NC-SA 4.0 Matplotlib 可以选择使用 LaTeX 来管理所有文本布 ...

  8. Matplotlib 中文用户指南 4.5 标注

    标注 原文:Annotation 译者:飞龙 协议:CC BY-NC-SA 4.0 基本标注 使用text()会将文本放置在轴域的任意位置. 文本的一个常见用例是标注绘图的某些特征,而annotate ...

  9. Matplotlib 中文用户指南 3.7 变换教程

    变换教程 原文:Transformations Tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 像任何图形包一样,matplotlib 建立在变换框架之上,以便在坐标系,用户数据坐 ...

最新文章

  1. 从底层吃透java内存模型(JMM)、volatile、CAS
  2. 模仿虚基类和抽象方法
  3. velocity 遍历map
  4. CentOS下Storm 1.0.0集群安装详解
  5. minincom cannot open /dev/modem
  6. 信息学奥赛一本通 2018:【例4.3】输出奇偶数之和
  7. 95-110-020-源码-Env-StreamExecutionEnvironment
  8. 苹果6软件服务器验证失败是怎么回事,iPhone6手机出现验证错误怎么办?
  9. sql语句回忆录1-多表连接子查询
  10. PYG解密小组的Visual Assist X插件完全卸载
  11. SCADA电力系统基础业务知识
  12. CuteFTP实现windows和Fedora12数据共享
  13. 「 数学模型 」“使用SPSS软件线性回归分析”实例
  14. 当 TiDB 遇到图数据库 | TiDB Hackathon 2020 优秀项目分享
  15. 手机屏幕密码怎么用计算机解锁,手机屏幕密码忘了怎么解锁
  16. 关于阿里云视频点播出现的问题
  17. Microsoft Help Viewer help查看器所需的内容文件缺失或者损坏 解决办法
  18. 阿里云 mysql tps_MySQL_tps
  19. 4.Tableau的数据预处理
  20. Java数据结构-图

热门文章

  1. LeetCode Reverse Linked List II 反置链表2
  2. Atitit.异步编程 java .net php python js 对照
  3. SQL FOREIGN KEY 约束
  4. javascript基础整理
  5. 【错误记录】Ubuntu 修改 hosts 文件 ( 使用 gedit /etc/hosts 命令打开并修改 hosts 文件 )
  6. 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )
  7. 【数据挖掘】数据挖掘总结 ( 拉普拉斯修正 | 贝叶斯分类器示例2 ) ★
  8. 【Android 内存优化】Android Profiler 工具常用功能 ( 监测内存 | 内存快照 )
  9. 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )
  10. CF 529B Group Photo 2 (online mirror version)