私はシミュレーションが進むにつれてプロットされるデータが更新されるような、プロットをPythonで作成しようとしています。 MATLABで、私は次のコードでこれを行うことができます:私はクラス内でこれを行うにはanimation
モジュールにmatplotlib
のFuncAnimation
機能を使用しようとしているPythonの動的プロット
t = linspace(0, 1, 100);
figure
for i = 1:100
x = cos(2*pi*i*t);
plot(x)
drawnow
end
。それは私のシミュレーションで各タイムステップ後に電圧を再計算する関数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に3番目のバージョンを適応させるだろう-line-plot-in-python-matplotlib?rq = 1)を実行します。 – cphlewis
ありがとう、@cphlewis。その解決策の問題は、私が別の関数を持っていれば、単純に正の整数を数える 'count()'と言って、 'plt.show()'の後にこれを実行すると 'count()'は私はプロットを閉じる。 'plt.show()'を 'plt.draw()'に置き換えると、プロットがまったく表示されなくなりますが、 'count()'が実行されます。プログラムが続けて 'count()'が動いている間にプロットを更新するには?バックエンドはQt5Aggで、インタラクティブモードをオンにしています。 –
3番目の解決策では、 'update()'は 'count()'を両方呼び出すので、プロットは続行されます。 – cphlewis