Matplotlib 中文用戶指南 7.2 Python shell 中使用 Matplotlib

在 Python shell 中使用 Matplotlib

原文:Using matplotlib in a python shell

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

警告

該頁(yè)面的內(nèi)容已嚴(yán)重過(guò)時(shí)。

默認(rèn)情況下位仁,matplotlib 將繪圖延遲到腳本結(jié)束,因?yàn)槔L圖可能是開(kāi)銷大的操作管宵,并且你可能不想在每次更改單個(gè)屬性時(shí)更新繪圖,而是只在所有屬性更改后更新一次胁住。

但是在 python shell 中工作時(shí)沦寂,通常需要用每個(gè)命令更新繪圖,例如爽航,在更改xlabel()或一行的標(biāo)記樣式之后。 雖然這在概念上很簡(jiǎn)單乾忱,但在實(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 集成而無(wú)需導(dǎo)入惯悠,使用%matplotlib魔術(shù)命令是首個(gè)選擇邻邮。 參見(jiàn) 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)在圖形窗口中睬塌。

注意在上面的例子中泉蝌,我們沒(méi)有導(dǎo)入任何 matplotlib 名稱,因?yàn)樵?pylab 模式下揩晴,ipython 將自動(dòng)導(dǎo)入它們勋陪。 ipython 還為你啟用交互模式,這會(huì)導(dǎo)致每個(gè) pyplot 命令觸發(fā)圖形更新硫兰,并且還提供了一個(gè) matplotlib 感知的運(yùn)行命令诅愚,來(lái)高效運(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īng)顟B(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 : TkAgginteractive : True(請(qǐng)參閱自定義 matplotlib)并啟動(dòng) python傲茄。 然后:

>>> from pylab import *
>>> plot([1,2,3])
>>> xlabel('hi mom')

應(yīng)該能夠開(kāi)箱即用耕捞。 這也可能適用于最新版本的 qt4agg 和 gtkagg 后端衔掸,以及 Macintosh 上的 macosx 后端。 注意俺抽,在批處理模式下敞映,即從腳本制作圖形時(shí),交互模式可能很慢磷斧,因?yàn)樗妹總€(gè)命令重繪圖形振愿。 因此,你可能需要仔細(xì)考慮弛饭,然后通過(guò)matplotlibrc文件而不是使用下一節(jié)中列出的函數(shù)冕末,使其作為默認(rèn)行為。

Gui shell 問(wèn)題最多侣颂,因?yàn)樗鼈儽仨氝\(yùn)行主循環(huán)档桃,但是交互式繪圖也涉及主循環(huán)。 Ipython 已經(jīng)為 matplotlib 主后端解決了這一切問(wèn)題憔晒。 可能有其他 shell 和 IDE 也可以在交互模式下使用 matplotlib藻肄,但一個(gè)明顯的候選項(xiàng)不會(huì):python IDLE IDE 是一個(gè)不支持 pylab 交互模式的 Tkinter gui 應(yīng)用程序,無(wú)論后端是什么拒担。

控制交互式更新

pyplot接口的interactive屬性控制是否在每個(gè)pyplot命令上繪制圖畫(huà)布嘹屯。 如果interactiveFalse,那么每個(gè)plot命令都會(huì)更新圖形狀態(tài)从撼,但只會(huì)在顯式調(diào)用draw()時(shí)繪制州弟。 當(dāng)interactiveTrue時(shí),每個(gè)pyplot命令都會(huì)觸發(fā)繪制低零。

pyplot接口提供了 4 個(gè)有助于交互式控制的命令婆翔。

isinteractive()

返回交互式設(shè)置。True|False掏婶。

ion()

將交互式模式打開(kāi)浙滤。

ioff()

將交互式模式關(guān)閉。

draw()

強(qiáng)制圖形重新繪制气堕。

當(dāng)處理繪圖開(kāi)銷很大的大型圖形時(shí)纺腊,你可能希望臨時(shí)關(guān)閉 matplotlib 的交互式設(shè)置來(lái)避免性能損失:

>>> #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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茎芭,隨后出現(xiàn)的幾起案子揖膜,更是在濱河造成了極大的恐慌,老刑警劉巖梅桩,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壹粟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)趁仙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門洪添,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人雀费,你說(shuō)我怎么就攤上這事干奢。” “怎么了盏袄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵忿峻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我辕羽,道長(zhǎng)逛尚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任刁愿,我火速辦了婚禮绰寞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铣口。我一直安慰自己滤钱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布枷踏。 她就那樣靜靜地躺著,像睡著了一般掰曾。 火紅的嫁衣襯著肌膚如雪旭蠕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天旷坦,我揣著相機(jī)與錄音掏熬,去河邊找鬼。 笑死秒梅,一個(gè)胖子當(dāng)著我的面吹牛旗芬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捆蜀,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疮丛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辆它?” 一聲冷哼從身側(cè)響起誊薄,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锰茉,沒(méi)想到半個(gè)月后呢蔫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡飒筑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年片吊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绽昏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俏脊,死狀恐怖全谤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情联予,我是刑警寧澤啼县,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站沸久,受9級(jí)特大地震影響季眷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卷胯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一子刮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窑睁,春花似錦挺峡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至箫津,卻和暖如春狭姨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苏遥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工饼拍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人田炭。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓师抄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親教硫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叨吮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容