python bashplotlib_Matplotlib 中文用户指南 7.2 Python shell 中使用 Matplotlib
在 Python shell 中使用 Matplotlib
譯者:飛龍
警告
該頁面的內(nèi)容已嚴(yán)重過時(shí)。
默認(rèn)情況下,matplotlib 將繪圖延遲到腳本結(jié)束,因?yàn)槔L圖可能是開銷大的操作,并且你可能不想在每次更改單個(gè)屬性時(shí)更新繪圖,而是只在所有屬性更改后更新一次。
但是在 python shell 中工作時(shí),通常需要用每個(gè)命令更新繪圖,例如,在更改xlabel()或一行的標(biāo)記樣式之后。 雖然這在概念上很簡單,但在實(shí)踐中它可能很棘手,因?yàn)?matplotlib 在底層是一個(gè)圖形用戶界面應(yīng)用程序,并擁有一些技巧,使應(yīng)用程序在一個(gè) python shell 正常工作。
使用 IPython 解決
注意
這里描述的模式出于歷史原因仍然存在,但強(qiáng)烈建議不要使用。它污染函數(shù)的命名空間,會(huì)影響 python 內(nèi)建設(shè)施,并可能導(dǎo)致錯(cuò)誤難以跟蹤。 要獲得 IPython 集成而無需導(dǎo)入,使用%matplotlib魔術(shù)命令是首個(gè)選擇。 參見 ipython 文檔。
幸運(yùn)的是,一個(gè)增強(qiáng)的交互式 python shell,ipython 已經(jīng)找出了所有這些技巧,并且可被 matplotlib 感知,所以當(dāng)你在 pylab 模式下啟動(dòng) 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]: %pylab
Welcome to pylab, a matplotlib-based Python environment.
For more information, type 'help(pylab)'.
In [2]: x = randn(10000)
In [3]: hist(x, 100)
它為你設(shè)置一切使交互式繪圖工作,就像你期望的那樣。 調(diào)用figure()并彈出圖形窗口,調(diào)用plot()使你的數(shù)據(jù)出現(xiàn)在圖形窗口中。
注意在上面的例子中,我們沒有導(dǎo)入任何 matplotlib 名稱,因?yàn)樵?pylab 模式下,ipython 將自動(dòng)導(dǎo)入它們。 ipython 還為你啟用交互模式,這會(huì)導(dǎo)致每個(gè) pyplot 命令觸發(fā)圖形更新,并且還提供了一個(gè) matplotlib 感知的運(yùn)行命令,來高效運(yùn)行 matplotlib 腳本。 ipython 在運(yùn)行命令期間關(guān)閉交互模式,然后在運(yùn)行結(jié)束時(shí)恢復(fù)交互狀態(tài),以便你可以手動(dòng)繼續(xù)調(diào)整圖形。
ipython 已經(jīng)嵌入了很多最近的作品,從 pylab 支持,到各種 GUI 應(yīng)用程序,所以請(qǐng)檢查 ipython 郵件列表的最新狀態(tài)。
其它 Python 解釋器
如果你不能使用 ipython,并且仍然想在交互式 python shell 使用 matplotlib/pylab,例如,plain-ole 標(biāo)準(zhǔn)的 python 交互式解釋器,你將需要了解什么是 matplotlib 后端 。
有了 TkAgg 后端,它使用 Tkinter 用戶界面工具包,你可以從任意的非 gui python shell 使用 matplotlib。 只需在你的matplotlibrc文件中設(shè)置backend : TkAgg和interactive : True(請(qǐng)參閱自定義 matplotlib)并啟動(dòng) python。 然后:
>>> from pylab import *
>>> plot([1,2,3])
>>> xlabel('hi mom')
應(yīng)該能夠開箱即用。 這也可能適用于最新版本的 qt4agg 和 gtkagg 后端,以及 Macintosh 上的 macosx 后端。 注意,在批處理模式下,即從腳本制作圖形時(shí),交互模式可能很慢,因?yàn)樗妹總€(gè)命令重繪圖形。 因此,你可能需要仔細(xì)考慮,然后通過matplotlibrc文件而不是使用下一節(jié)中列出的函數(shù),使其作為默認(rèn)行為。
Gui shell 問題最多,因?yàn)樗鼈儽仨氝\(yùn)行主循環(huán),但是交互式繪圖也涉及主循環(huán)。 Ipython 已經(jīng)為 matplotlib 主后端解決了這一切問題。 可能有其他 shell 和 IDE 也可以在交互模式下使用 matplotlib,但一個(gè)明顯的候選項(xiàng)不會(huì):python IDLE IDE 是一個(gè)不支持 pylab 交互模式的 Tkinter gui 應(yīng)用程序,無論后端是什么。
控制交互式更新
pyplot接口的interactive屬性控制是否在每個(gè)pyplot命令上繪制圖畫布。 如果interactive是False,那么每個(gè)plot命令都會(huì)更新圖形狀態(tài),但只會(huì)在顯式調(diào)用draw()時(shí)繪制。 當(dāng)interactive為True時(shí),每個(gè)pyplot命令都會(huì)觸發(fā)繪制。
pyplot接口提供了 4 個(gè)有助于交互式控制的命令。
isinteractive()
返回交互式設(shè)置。True|False。
ion()
將交互式模式打開。
ioff()
將交互式模式關(guān)閉。
draw()
強(qiáng)制圖形重新繪制。
當(dāng)處理繪圖開銷很大的大型圖形時(shí),你可能希望臨時(shí)關(guān)閉 matplotlib 的交互式設(shè)置來避免性能損失:
>>> #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)
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的python bashplotlib_Matplotlib 中文用户指南 7.2 Python shell 中使用 Matplotlib的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ipv6前缀长度计算_IPv6和IPv4
- 下一篇: 获取电脑的唯一识别码_教你如何知道自己的