%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from ipywidgets import interact, FloatSlider, RadioButtons
amplitude_slider = FloatSlider(min=0.1, max=1.0, step=0.1, value=0.2)
color_buttons = RadioButtons(options=['blue', 'green', 'red'])
# decorate the plot function with an environment from the UIs:
@interact(amplitude=amplitude_slider, color=color_buttons)
def plot(amplitude, color):
fig, ax = plt.subplots(figsize=(4, 3),
subplot_kw={'axisbg':'#EEEEEE',
'axisbelow':True})
ax.grid(color='w', linewidth=2, linestyle='solid')
x = np.linspace(0, 10, 1000)
ax.plot(x, amplitude * np.sin(x), color=color,
lw=5, alpha=0.4)
ax.set_xlim(0, 10)
ax.set_ylim(-1.1, 1.1)
多次使用小部件可以获得多个输出:
我需要在代码中更新什么才能在每次使用窗口小部件时清除绘图?
答案 0 :(得分:3)
我认为可能存在两个问题:
%matplotlib inline
。因此,一旦更改了绘图,将显示一个新图像,而不是当前更改的图像。选项可能是使用%matplotlib notebook
后端。
然后,人们将创建一次图并绘制一些初始值。我们还需要保留对艺术家的引用,这应该由小部件更新。
一旦完成,交互式人物似乎与交互式小部件冲突。为了解决这个问题,我将所有交互式小部件(包括其导入)放在图下方的新单元格中。
我不确定发生这种情况的原因,但以下似乎是一个有效的解决方案。
进口
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
创建图形,绘制初始线
fig, ax = plt.subplots(figsize=(4, 3),
subplot_kw={'facecolor':'#EEEEEE',
'axisbelow':True})
ax.grid(color='w', linewidth=2, linestyle='solid')
x = np.linspace(0, 10, 1000)
line, = ax.plot(x, 0.2 * np.sin(x), color="blue",
lw=5, alpha=0.4)
ax.set_xlim(0, 10)
ax.set_ylim(-1.1, 1.1)
最后,在新单元格中,进行交互,仅更新艺术家,而不是重新创建它们。
from ipywidgets import interact, FloatSlider, RadioButtons
amplitude_slider = FloatSlider(min=0.1, max=1.0, step=0.1, value=0.2)
color_buttons = RadioButtons(options=['blue', 'green', 'red'])
# decorate the plot function with an environment from the UIs:
@interact(amplitude=amplitude_slider, color=color_buttons)
def plot(amplitude, color):
y = amplitude * np.sin(x)
line.set_ydata(y)
line.set_color(color)
以下是它的外观图像。