gpt4 book ai didi

python-3.x - 与 ipywidgets 事件交互和绘图会产生许多图形

转载 作者:行者123 更新时间:2023-12-03 11:22:10 25 4
gpt4 key购买 nike

我正在尝试使用 widget events制作交互式图表。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

import ipywidgets as widgets

def myplot(n):
x = np.linspace(-5, 5, 30)
y = x**n

fig, ax = plt.subplots(nrows=1, ncols=1);
ax.plot(x, y)
ax.set_xlabel('x')
ax.set_ylabel('y')

plt.show()

交互按预期工作(它以交互方式更改图形):
widgets.interact(myplot, n=(0,5));

但是,当您与 slider 交互时,以下代码段会创建几个出现在下方的图形。
n_widget = widgets.IntSlider(
value=2,
min=0,
max=5)

def on_value_change(change):
myplot(n=n_widget.value)

n_widget.observe(on_value_change)
display(n_widget)

我可以像使用 widgets.interact() 一样更新绘图吗?

我当前的安装是使用 conda 和 Python 3.6(Windows 机器)。
ipywidgets                7.1.0                     
jupyter 1.0.0
jupyter_client 5.2.1
jupyter_console 5.2.0
jupyter_core 4.4.0
matplotlib 2.1.1
notebook 5.3.1
numpy 1.14.0

最佳答案

请注意,以下是 ipywidgets 版本 < 7.0 的有效解决方案。对于 ipywidgets >= 7.0 的解决方案,请参阅 this GitHub issue .

虽然在许多简单的情况下 plt.show()可以很好地替换单元格的输出,但情况并非总是如此。在 Jupyter 中使用交互式元素时,使用 IPython.display.display 通常更有帮助。 .

在这里,您可能不想为每个交互创建一个新图。相反,只需为绘图设置新数据就足够了。然后您可以自动缩放新数据的绘图并显示图形。您可以使用 IPython.display.clear_output显示新图形后清除输出。这确保在输出单元格中始终存在单个图,与 interact 的使用无关或 observe .

def myplot(n):
line.set_ydata(x**n)
ax.relim()
ax.autoscale()
display(fig)
clear_output(wait=True)

完成笔记本:
# cell 1
%%capture
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import display, clear_output
import ipywidgets as widgets

fig, ax = plt.subplots(nrows=1, ncols=1);
x = np.linspace(-5, 5, 30)
y = x**0

line, = ax.plot(x, y)
ax.set_xlabel('x')
ax.set_ylabel('y')

def myplot(n):
line.set_ydata(x**n)
ax.relim()
ax.autoscale()
display(fig)
clear_output(wait=True)

#cell2
widgets.interact(myplot, n=(0,5));

#cell3
n_widget = widgets.IntSlider(
value=2,
min=0,
max=5)

def on_value_change(change):
myplot(n=n_widget.value)

n_widget.observe(on_value_change)
display(n_widget)

enter image description here

关于python-3.x - 与 ipywidgets 事件交互和绘图会产生许多图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48380967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com