如何使 ipywidget 按钮更新 matplotlib 图形的特定轴?
How to make a ipywidget button update a specific axis of a matplotlib figure?
如何让 Jupyter notebook 中的 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)
但是,单击此示例中的按钮似乎没有执行任何操作。我尝试了 adding/removing 和 plt.show()
调用的不同组合,使用 fig.draw()
代替,使用 fig.canvas.draw_idle()
等,但没有太大成功。完成此操作的正确、最不“hacky”的方法是什么?
注意:This question只是关于如何让按钮更新绘图,就像我的第一个例子,而不是让按钮只更新特定的轴。
使用此代码
import ipywidgets as widgets
from IPython.display import display
import matplotlib.pyplot as plt
import numpy as np
%matplotlib widget
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)
我得到了这个输出
如何让 Jupyter notebook 中的 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)
但是,单击此示例中的按钮似乎没有执行任何操作。我尝试了 adding/removing 和 plt.show()
调用的不同组合,使用 fig.draw()
代替,使用 fig.canvas.draw_idle()
等,但没有太大成功。完成此操作的正确、最不“hacky”的方法是什么?
注意:This question只是关于如何让按钮更新绘图,就像我的第一个例子,而不是让按钮只更新特定的轴。
使用此代码
import ipywidgets as widgets
from IPython.display import display
import matplotlib.pyplot as plt
import numpy as np
%matplotlib widget
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)
我得到了这个输出