2016-10-03 44 views
3

我發現對python/matplotlib的最新更新已經破壞了一個關鍵特性,即在代碼執行過程中定期更新或「刷新」matplotlib圖的功能。下面是一個最小(非)工作示例。在代碼執行過程中更新matplotlib圖

import numpy as np 
from matplotlib.pyplot import * 
from time import sleep 

x = np.array([0]) 
y = np.array([0]) 

figure() 
for i in range(51): 
    gca().cla() 
    plot(x,y) 
    xlim([0,50]) 
    ylim([0,2500]) 
    draw() 
    show(block = False) 
    x = np.append(x,[x[-1]+1]) 
    y = np.append(y,[x[-1]**2]) 
    sleep(0.01) 

如果我運行使用Python 3.4.3和1.4.3 matplotlib這個節目,我可以看到的情節不斷更新,曲線成長,如程序運行。但是,在matplotlib 1.5.3中使用Python 3.5.1時,matplotlib窗口打開,但不顯示圖。相反,它不斷顯示窗口「沒有響應」,並且只在代碼完成執行時才顯示最終的圖形。

我該怎麼辦?有什麼方法可以實現我想要使用最新版本的功能?

注意:如果這有所幫助,我從默認的IDLE環境運行此操作。

+0

你有沒有在你的導入之間嘗試過這一行:'%matplotlib inline'? – estebanpdl

+0

@estebanpdl在我看來,命令是爲了在ipython中使用來強制圖表出現在命令窗口中。我不認爲這就是我要找的。 – zephyr

回答

0

這很有趣。我用來繪製互動情節略有不同:

import numpy as np 
import matplotlib.pyplot as plt 
from time import sleep 

x = np.array([0]) 
y = np.array([0]) 

plt.ion() 
fig = plt.figure() 
ax=fig.add_subplot(111) 
ax.set_xlim([0,50]) 
ax.set_ylim([0,2500]) 
line, = ax.plot(x,y) 
plt.show() 
for i in range(51): 
    x = np.append(x,[x[-1]+1]) 
    y = np.append(y,[x[-1]**2]) 
    line.set_data(x,y) 
    plt.draw() 
    sleep(0.01) 

你(或任何人)可以檢查這表明在Matplotlib 1.5同樣的問題?

+0

是的,這對我來說也適用於1.4。我最後得到的'show'並不是絕對必要的,它只是真正需要的'draw'命令,但我保留它在那裏,因爲它不會傷害任何東西。唯一的另一個區別是'離子',我發現它並沒有真正做任何事情來幫助。 – zephyr

+0

問題是,如果它在Matplotlib 1.5中工作? – ImportanceOfBeingErnest

相關問題