Matplotlib 中文用户指南 7.2 Python shell 中使用 Matplotlib
在 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 : TkAgg和interactive : 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命令上繪制圖畫布。 如果interactive是False,那么每個plot命令都會更新圖形狀態,但只會在顯式調用draw()時繪制。 當interactive為True時,每個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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十二篇:实用的关联容器
- 下一篇: GitHub发布开源项目指南,以帮助更多