Created Monday 10 December 2012 python
matplotlib默認是延遲繪圖直到腳本結束,由於繪圖是一個高代價的操做。因此可能不想每次每一個屬性的改變就更新繪圖,只有全部的屬性都改變了才更新。 shell
可是,當在python shell上工做時,你一般想圖形根據每一個命令如改變xlabel()或者線條標識類型時都更新。概念上這是很簡單的,可是在實際中確實很複雜,由於matplotlib本質上是圖形用戶接口應用程序,因此有不少技巧來使matplotlib在python shell上工做的很好。 後端
幸運的是,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)'. In [1]: x = randn(10000) In [2]: hist(x, 100)
它會如你所期待的那樣作了不少交互式繪圖工做。調用figure(),就會彈出視圖窗口;調用plot(),你的數據就會顯示在視圖窗口上。 oop
注意在上面的示例中,咱們並無導入任何matplotlib包,由於這是在pylab模式下,ipython會自動把它們導入進來。ipython會爲你打開交互式模式,這會致使pyplot命令觸發視圖窗口更新,同時提供了matplotlib提醒run命令來有效運行腳本。ipython會關閉交互式模式當運行run命令時,而後在運行完畢使恢復到交互式模式的狀態,你又能夠繼續手動操做視圖窗口。 性能
在pylab模式的支持下,ipython己經爲嵌入到圖形用戶接口應用程序作了不少工做,能夠在Ipython郵件列表裏查看最新狀態。 大數據
若是你沒有使用ipython,可是還想使用matplotlib/pylab模式在交互式python shell上。如標準python交互式解釋器,或者你喜歡的IDE下的解釋器,你應該瞭解什麼是matplotlib的後端(什麼是後端?) spa
設置爲TkAgg後端就可使用Tkinter的用戶接口工具箱,你也使用matplotlib在任意的python shell,僅僅須要設置你的後端和交互式模式 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,這是太好了! code
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)