4
%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)

多次使用小部件让我得到了多个输出:

在此处输入图像描述

我需要在代码中更新什么以便在每次使用小部件时清除绘图?

4

1 回答 1

4

我觉得可能有两个问题:

  1. 第一个是每次更新交互元素时创建一个新的图形和轴。所以这个新数字将被附加。
  2. 其次,您正在使用%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)

这是它的外观图像。

在此处输入图像描述

于 2017-04-05T07:50:44.640 回答