2009-08-02 63 views
9

怪異的行爲(關閉第一個圖表窗口之後),我敢肯定,這是我搞砸了,但我想獲得什麼正在發生的底部:Python的Matplotlib掛起時要求繪製第二個圖表

我運行下面的代碼使用matplotlib創建一個非常簡單的圖形窗口:

>>> import matplotlib.pyplot as plt 
>>> fig = plt.figure() 
>>> ax = fig.add_subplot(111) 
>>> ax.plot((1, 3, 1)) 
[<matplotlib.lines.Line2D object at 0x0290B750>] 
>>> plt.show() 

,並如預期我得到一個所期望的圖表,在已彈出一個新窗口,其中包含一個非常簡單的藍線去從1到3在y軸上再次回到1,以0,1,2作爲x軸點(如同例子)。現在我關閉圖形窗口(使用窗口右上角的十字按鈕)。這使我控制的解釋,和我重新開始,創建新的對象:

>>> 
>>> fig1 = plt.figure() 
>>> bx = fig1.add_subplot(111) 
>>> bx.plot((1, 3, 1)) 
[<matplotlib.lines.Line2D object at 0x029E8210>] 
>>> plt.show() 

不過這一次,我得到一個窗框,什麼也沒有在它(只是框架,沒有白色背景無),以及整個爆炸拍攝都懸而未決。我必須「結束任務」,python解釋器被系統終止,並且我得到一個命令提示符。在mac上類似的行爲(除了在掛起之前它實際上先繪製圖表)。

因此不知何故Python和/或matplotlib不希望我手動關閉窗口。任何人都知道發生了什麼,我該怎麼做?我想要做的是在解釋器中播放不同的情節,顯然這種行爲無濟於事。我知道我可以使用「Ipython -pylab」,但爲了學習,我想了解上述錯誤。

謝謝。

回答

2

顯然,這是由tkinter後端中的一個錯誤引起的。參見例如https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/313834。它正在努力... 如果你可以倒退到一個稍微老一點的tkinter庫,那應該是一個解決時間問題的方法(幾周前我遇到了同樣的問題,這是我唯一的希望)。

0

你嘗試:

plt.close() 

,以確保您關閉劇情對象?

+0

之前,我現在有卡西,但沒有任何變化。 當我調用plt.show()時,它顯示Python解釋器不能使用的圖形窗口,即我沒有提示。只有當我關閉窗口時,我纔會收到提示。如果我然後調用plt.close()然後繼續,它的行爲方式完全相同,即掛起。 感受(在Matplotlib網站周圍挖掘)他們基本上希望你堅持iPython在-pylab模式。 – 2009-08-02 18:30:09

+0

嘗試下載scipy,如果你還沒有它並導入pylab。它就像matplotlib一樣工作。 – Nope 2009-08-02 18:43:41

+0

沒有 - 也沒有。如果導入pylab,並執行上述操作,則行爲方式完全相同。 – 2009-08-02 19:23:17

2

你試過用ipython代替標準的python解釋器嗎?

你可以用下面的命令來安裝IPython中:

easy_install ipython 

然後,IPython中必須用pylab跑出一個特定的模式,稱爲-pylab:

ipython -pylab 

In[1]: ... 

我認爲,大多數的人們使用這個解決方案用python繪製圖形,它是一個類似於R/Matlab,完成等的命令行......並且它爲每個繪圖運行一個單獨的線程,所以它不應該有你遇到的問題描述。

8

對派對遲了三個月,但我在matlibplot文檔中找到了使用draw()而不是show()的建議;前者顯然只是渲染當前的情節,而後者啓動所有的交互工具,這是問題似乎開始的地方。

它並不十分顯着放置在文件中,但這裏的鏈接: http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show

對於它的價值,我已經試過pylab.show(),並有正是你做了同樣的問題,而pylab。如果我只想看到輸出,draw()似乎工作正常。

0

正如上面貼的地方:

使用plt.draw()你所有的地塊除了最後一個。

對於你最後的情節,用plt.show()

這很奇怪,但如果你沒有在最後一個使用plt.show(),並嘗試plt.draw()相反,你看不到任何地塊。

祝你好運!

0

我在使用TkAgg作爲後端時遇到了這個問題。使用plt.close('all')後我的電腦凍結了。

解決方案是切換到不同的後端。我現在使用Qt4Agg代替。

如果你有Qt4Agg installed可以通過打字來切換後端:

plt.switch_backend('Qt4Agg') 

數據繪製

相關問題