歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Python Shell下使用matplotlib

目錄:

Python Shell下使用matplotlib
1 救星Ipython
2 其它pyton解釋器
3 控制交互式更新

matplotlib默認是延遲繪圖直到腳本結束,因為繪圖是一個高代價的操作。所以可能不想每次每個屬性的改變就更新繪圖,只有所有的屬性都改變了才更新。

但是,當在python shell上工作時,你通常想圖形根據每個命令如改變xlabel()或者線條標識類型時都更新。概念上這是很簡單的,但是在實際中確實很復雜,因為matplotlib本質上是圖形用戶接口應用程序,所以有很多技巧來使matplotlib在python shell上工作的很好。

1 救星Ipython

幸運的是,ipython,增強的交互式python shell.有很多技巧和matplotlib提醒,所以你可以用pylab模式啟動ipython。

www.linuxidc.com @linux:~> 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(),你的數據就會顯示在視圖窗口上。

注意在上面的示例中,我們並沒有導入任何matplotlib包,因為這是在pylab模式下,ipython會自動把它們導入進來。ipython會為你打開交互式模式,這會導致pyplot命令觸發視圖窗口更新,同時提供了matplotlib提醒run命令來有效運行腳本。ipython會關閉交互式模式當運行run命令時,然後在運行完畢使恢復到交互式模式的狀態,你又可以繼續手動操作視圖窗口。

在pylab模式的支持下,ipython己經為嵌入到圖形用戶接口應用程序做了很多工作,可以在Ipython郵件列表裡查看最新狀態。

2 其它pyton解釋器

如果你沒有使用ipython,但是還想使用matplotlib/pylab模式在交互式python shell上。如標准python交互式解釋器,或者你喜歡的IDE下的解釋器,你應該了解什麼是matplotlib的後端(什麼是後端?)

設置為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,這是太好了!

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)

Copyright © Linux教程網 All Rights Reserved