2017-02-13 26 views
1

是否有任何方法可以逐步創建繪圖,每次顯示plt.show方法被調用時的進度?即使玩弄plt.show(block = False)或plt.show(block = True)也無法使其工作。matplotlib在pydev中顯示

import matplotlib.pyplot as plt 

xvals = [i for i in range(0, 10)] 
yvals1 = [i**2 for i in range(0, 10)] 
yvals2 = [i**3 for i in range(0, 10)] 
yvals3 = [i**4 for i in range(0, 10)] 

f, ax = plt.subplots(1) 
ax.plot(xvals, yvals1) 

plt.show(block=False) 
raw_input("Program paused. Press Enter to continue...") 

ax.plot(xvals, yvals2) 
plt.show() # Need to close the window to go ahead. 
raw_input("Program paused. Press Enter to continue...") 

ax.plot(xvals, yvals3) 
plt.show(block=False) 
raw_input("Program paused. Press Enter to continue...") 

我在使用Pydev的virtualenv中運行matplotlib == 2.0.0。 有什麼想法?

+1

也許[這個答案](http://stackoverflow.com/a/12685979/3005167)中的信息可以幫助你。 (即嘗試在腳本的開頭調用'plt.ion()')。 – kazemakase

+0

除了添加plt.ion()之外,如果我在每個plt.show()命令之後添加一個plt.pause(0.0001),它就會生效。但我不知道是否還有其他更好的方法。 – fara

+1

還有另外一種方式:[動畫](http://matplotlib.org/1.4.1/examples/animation/index.html)哪種方式更好取決於你的用例。動畫更復雜,但可能更強大。對於「生產」代碼,我可能會這樣做。如果您只想在開發/調試期間運行您的代碼步驟,那麼在我看來,「快速和骯髒」的跳動「強健和精細」。 – kazemakase

回答

0

如果您釋放相關的事件循環以允許用戶界面刷新給用戶(例如:在qt上,您需要獲取事件循環併爲其調用QEventLoop :: processEvents,那麼您應該可以這樣做:出現)。