Python 使用matplotlib中的滑块更新条形图

Python 使用matplotlib中的滑块更新条形图,python,matplotlib,Python,Matplotlib,我试着制作一个简单的条形图,在这里我可以使用一个滑块来监控化学反应(a->B)。 到目前为止,下面的代码生成了一个带有反应步骤滑块的条形图。打印功能打印特定反应步骤后的预期值。但是,绘图将不会更新。我试过plt.draw(),plt.show()和fig.canvas.draw(),但都不起作用 import matplotlib.pyplot as plt import numpy as np from matplotlib.widgets import Slider, Button fig

我试着制作一个简单的条形图,在这里我可以使用一个滑块来监控化学反应(a->B)。 到目前为止,下面的代码生成了一个带有反应步骤滑块的条形图。打印功能打印特定反应步骤后的预期值。但是,绘图将不会更新。我试过
plt.draw()
plt.show()
fig.canvas.draw()
,但都不起作用

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()

将在滑块轴(而不是原始轴)内部绘制新条:

要克服这一问题,您应该处理轴对象,而不是使用pyplot。但是,由于您无论如何都希望更新条形图,而不是绘制新条形图,因此在此处使用条形图本身并使用
set\u 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)