带matplotlib滑块的动态打印



我想在matplotlib Slider的帮助下进行动态绘图。我的函数得到一个a,b值的数组,用于绘制β分布函数,滑块中的每个值都应该用新的a,b的值更新绘图。这是我的密码。

def plot_dynamic_beta(a_b_list: np.array, label_name: str):
def update(val):
timestamp = time_slider.val
a, b = a_b_list[timestamp] # new a, b values to draw the new distribution 
rv = beta(a, b)
Plot.set_ydata(rv.pdf(np.linspace(0, 1, 100))) # i guess here is the wrong part 
plt.draw()
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
rv = beta(1, 1)
Plot, = plt.plot(rv.pdf(np.linspace(0, 1, 100)), 'k-', lw=2, label=label_name)
plt.axis([0, 1, -10, 10])
# slider_x = np.arange(0, len(a_b_list))
slider_x = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor)
time_slider = Slider(slider_x, 'timepoint',
0, len(a_b_list) - 1, valinit=0, valstep=np.arange(0, len(a_b_list)))
time_slider.on_changed(update)
plt.show()

所以它正确地绘制了第一个绘图,但更改滑块值并不能绘制出我需要的内容。示例a_b_list=np.array([(1,2(,(2,2(,(3,2(,[(4,2(](当我改变滑块值时,它不会用我给出的a、b值来绘制贝塔分布。例如,如果我把幻灯片改为2,它应该用a=3和b=2绘制贝塔分布图,但它没有做到。我做错了什么?

我用plotly得到了它。这是我的代码,可以得到问题中描述的情节。

def plot_dynamic_beta(a_b_list: np.array or list, label_name: str):
fig = go.Figure()
for a, b in a_b_list:
beta_new = beta(a, b)
fig.add_trace(go.Scatter(visible=False,
line=dict(color="#00CED1", width=6),
name="t = " + str(np.where(a_b_list == (a, b))),
x=np.linspace(0, 1, 100),
y=beta_new.pdf(np.linspace(0, 1, 100))))
# Create and add slider
steps = []
for i in range(len(fig.data)):
step = dict(
method="update",
args=[{"visible": [False] * len(fig.data)},
{"title": "Beta distribution switched to timestamp: " + str(i)}],  # layout attribute
)
step["args"][0]["visible"][i] = True  # Toggle i'th trace to "visible"
steps.append(step)
sliders = [dict(
active=0,
currentvalue={"prefix": "Frequency: "},
pad={"t": 100},
steps=steps
)]
fig.update_layout(
sliders=sliders
)
fig.show()

最新更新