2017-06-07 5 views
1

私は化学反応(A→B)を反応ステップのスライダーでモニターすることができる単純な棒グラフを作ろうとします。 これまでのところ、次のコードでは、反応ステップのスライダ付きのAの棒グラフが生成されています。印刷機能は、特定の反応ステップの後にAの期待値を印刷します。ただし、プロットは更新されません。私はplt.draw()plt.show()fig.canvas.draw()を試しましたが、どれもうまくいきませんでした。matplotlibのスライダーを使って棒グラフを更新

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.widgets import Slider, Button 

fig, ax = plt.subplots() 
plt.subplots_adjust(bottom=0.25) 
fig.canvas.set_window_title('Einfluss der Geschwindigkeitskonstanten') 

a0 = 1 
b0 = 0 
plt.axis([0, 5, 0, 2]) 
plt.xticks([1, 4], ['A', 'B']) 
plt.bar(1, a0, color = 'red') 

#slider: 
axcolor = 'lightblue' 
axrs = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor) 
srs = Slider(axrs, 'RS', 0, 20, valinit=0) 

def slider_val_fkt(t): 
    ya = [] 
    t = srs.val 
    ya = [np.exp(-0.6 * t)] 
    print(ya) 
    plt.bar(1, ya, color = 'red') 
    #plt.draw() 
    #plt.show() 
    fig.canvas.draw() 

srs.on_changed(slider_val_fkt) 

plt.show() 

答えて

1

新しいバーがスライダーの内側に描かれている代わりに、元の軸の軸: enter image description here

あなたが代わりにpyplotを使用してのAxesオブジェクト上で動作するはずこれを克服するために。ただし、新しいバーを描くのではなく、バーを更新したいので、バー自体を操作してset_heightを使用して更新するだけで十分です。

bars = plt.bar(1, a0, color = 'red') 

axrs = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor='lightblue') 
srs = Slider(axrs, 'RS', 0, 20, valinit=0) 

def slider_val_fkt(t): 
    t = srs.val 
    ya = [np.exp(-0.6 * t)] 
    bars[0].set_height(ya[0]) 
    fig.canvas.draw_idle() 

srs.on_changed(slider_val_fkt) 
関連する問題