Python Shell下使用matplotlib

Python Shell下使用matplotlib

Created Monday 10 December 2012 python

matplotlib默認是延遲繪圖直到腳本結束,由於繪圖是一個高代價的操做。因此可能不想每次每一個屬性的改變就更新繪圖,只有全部的屬性都改變了才更新。 shell

可是,當在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)'.

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郵件列表裏查看最新狀態。 大數據

6.2 其它pyton解釋器

若是你沒有使用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

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)
相關文章
相關標籤/搜索