我正嘗試在Python中創建一個繪圖的數據,其中正在繪製的數據在我的模擬進行時得到更新。在MATLAB中,我可以用下面的代碼做到這一點:python中的動態圖
t = linspace(0, 1, 100);
figure
for i = 1:100
x = cos(2*pi*i*t);
plot(x)
drawnow
end
我試圖用matplotlib
的FuncAnimation
功能animation
模塊在做這個類中。它調用一個函數plot_voltage
,它在我的模擬中重新計算每個時間步之後的電壓。我有它設置如下:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def __init__(self):
ani = animation.FuncAnimation(plt.figure(2), self.plot_voltage)
plt.draw()
def plot_voltage(self, *args):
voltages = np.zeros(100)
voltages[:] = np.nan
# some code to calculate voltage
ax1 = plt.figure(2).gca()
ax1.clear()
ax1.plot(np.arange(0, len(voltages), 1), voltages, 'ko-')`
當我的模擬運行,數字顯示了,但只是凍結。但是,代碼無誤地運行。有人能讓我知道我錯過了什麼嗎?
我會適應的第三個版本爲[這個答案](http://stackoverflow.com/questions/28074461/animating-growing -line積合蟒-matplotlib?RQ = 1)。 – cphlewis
謝謝@cphlewis。這個解決方案的問題是,如果我有另一個函數,比如'count()',它只是計算正整數,我在'plt.show()'後面運行這個函數,'count()'不會運行直到我關閉了情節。用'plt.draw()'代替'plt.show()'會導致圖不顯示,但是'count()'運行。如何在程序繼續並且count()運行時更新圖表?我的後端是Qt5Agg上的交互模式。 –
在第三種解決方案中,update()會調用你的count(),所以繪圖繼續。 – cphlewis