2010-05-07 47 views
2

我在linux中工作,我不知道爲什麼使用python和matplotlib命令只畫我一次圖表。 我第一次打電話給show(),情節是繪製的,沒有任何問題,但不是第二次和以下。show()不再重畫

我關閉了顯示兩個調用之間的圖表的窗口。你知道爲什麼和熱點解決它嗎?

感謝AFG

 
from numpy import * 
from pylab import * 

data = array([ 1,2,3,4,5]) 
plot(data) 
[<matplotlib.lines.Line2D object at 0x90c98ac>] 
show() # this call shows me a plot 

#..now I close the window... 

data = array([ 1,2,3,4,5,6]) 
plot(data) 
[<matplotlib.lines.Line2D object at 0x92dafec>] 
show() # this one doesn't shows me anything 

回答

1
在Windows

這個完美的作品:

from pylab import * 
plot([1,2,3,4]) 
[<matplotlib.lines.Line2D object at 0x03442C10>] 
#close window here 
plot([1,2,3,4]) 
[<matplotlib.lines.Line2D object at 0x035BC570>] 

做你嘗試用:

from matplotlib import interactive 
interactive(True) 

有時matplotlib產生一些麻煩,因爲我們必須記住,有些選項在matplotlibrc中設置(如後端或交互參數)。如果您使用來自不同編輯器(IDLE-tk,pycrust-wxpython)的matplotlib或交互式腳本,則必須考慮到在一種模式下工作的配置可能會在另一種模式下給您帶來問題,並且必須以編程方式進行修改或使用專用配置文件。

我給的例子,直接運行(並且沒有顯示()),因爲在matplotlibrc我有互動設置爲true默認

+0

感謝您的答覆,但它不工作。可能我有一些問題,因爲現在當我嘗試關閉窗口時,操作系統說它沒有響應。 – 2010-05-07 16:19:49

+0

你正在使用哪個shell/IDE?你設置了哪個後端? 你使用ipython得到同樣的問題嗎? – joaquin 2010-05-07 22:04:19

0

我猜你是在IDLE在Windows這樣做,因爲那是我我們注意到了這個問題。

從我推斷,使用TkAgg後端時出現問題,它隨基本Python dist一起提供,並且在使用matplotlib和IDLE時似乎是matplotlib的默認值。它與IDLE使用子進程的方式有關,因爲如果我使用禁用子進程的-n選項啓動IDLE,則不會出現此問題。在Windows上使用-n選項啓動它的簡單方法是右鍵單擊並選擇「使用IDLE打開」。如果你這樣做,你應該得到一個IDLE外殼,其中說 ===沒有子流程===

就在提示符的上方。例如,從華的解決方案借用的代碼,你可以試試這個簡單的代碼:

from matplotlib import interactive 
interactive(True) 
from pylab import * 
plot([1,2,3,4]) 

然後再次關閉該窗口,並鍵入最後一行到控制檯。它適用於IDLE中的-n選項。

那麼你能做什麼?您始終可以在沒有子進程的模式下運行IDLE,但存在危險。您可以使用不同的IDE。許多人建議IPython,儘管我自己還沒有出售它。你也可以爲matplotlib嘗試一個不同的後端。因爲我一直在想它是否會起作用,所以我稍後再嘗試一下。

1

您的編輯器/ IDE窗口系統和繪圖窗口之間可能存在衝突。

一個很好的解決方法是使用IPython。 IPython是一個非常好的交互式環境,並且已經解決了這些問題,並且還有許多其他優點。在開始時,用命令(來自終端窗口)ipython -pylab啓動IPython,以便將其置於交互式pylab模式。

0

show()只能在程序中使用一次,最終:它是一個永無止境的循環,用於檢查圖形窗口中的事件。

做你想要什麼的正常途徑是:

# … plot … 
draw() # Draws for real 
raw_input() # Or anything that waits for user input 

# … 2nd plot … 
draw() 
raw_input() 

# Last plot 
show() # or, again, draw(); raw_input() 

你可以試試,看看這是否對你的作品。

或者,你可以試着改變後端,如一些後端的工作比別人更好:

import matplotlib 
matplotlib.use('TkAgg') # For other backends, do matplotlib.use('') in a shell