【发布时间】:2023-03-23 07:20:01
【问题描述】:
如何让 Jupyter 笔记本中的 ipywidget 按钮更新特定轴上的绘图?
我已经知道如何在使用单轴时让按钮更新绘图,如下所示:
import ipywidgets as widgets
from IPython.display import display
import matplotlib.pyplot as plt
import numpy as np
btn = widgets.Button(description='Click')
display(btn)
output = widgets.Output()
def on_click_fn(obj):
output.clear_output()
values = np.random.rand(10)
with output:
plt.plot(values)
plt.show()
btn.on_click(on_click_fn)
display(output)
在此示例中,单击按钮会更新绘图并显示一组新的 10 个随机点。我认为将其扩展到更新特定轴会很简单,并尝试了以下操作:
import ipywidgets as widgets
from IPython.display import display
import matplotlib.pyplot as plt
import numpy as np
btn = widgets.Button(description='Click')
display(btn)
output = widgets.Output()
fig, ax = plt.subplots(ncols=2)
def on_click_fn(obj):
output.clear_output()
values = np.random.rand(10)
with output:
ax[0].plot(values)
plt.show()
btn.on_click(on_click_fn)
display(output)
但是,单击此示例中的按钮似乎没有任何作用。我尝试了添加/删除plt.show()调用的不同组合,改用fig.draw(),使用fig.canvas.draw_idle()等,但没有取得多大成功。完成此任务的正确、最少“hacky”方式是什么?
注意:This question 只是关于如何让按钮更新绘图,就像我的第一个示例一样,而不是让按钮仅更新特定轴。
【问题讨论】:
-
我不明白这个问题。无论有没有
plt.show(),第二个代码都可以正常工作。第一个代码缺少fig, ax = plt.subplots(),但也可以正常工作。这不是你想要达到的输出吗? -
在我的机器中,第二个代码不起作用。它产生两个子图,但单击按钮不会更新其中一个以显示新的随机数。您是否尝试按原样运行第二个代码并在您的机器上运行?
-
它对我有用,因为我无法在评论中附加任何图像,我将其作为答案,之后我将删除它(因为它不是答案)。跨度>
标签: python matplotlib jupyter-notebook ipywidgets