Jupyter笔记本:带小部件的交互式绘图

2024-05-23 22:07:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试生成一个依赖于小部件的交互式绘图。 我遇到的问题是,当我使用滑块更改参数时,新的绘图将在前一个绘图之后完成,而我只希望根据参数更改一个绘图。

示例:

from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets

import matplotlib.pyplot as plt
%matplotlib inline

import numpy as np

def plot_func(freq):
    x = np.linspace(0, 2*np.pi)
    y = np.sin(x * freq)
    plt.plot(x, y)

interact(plot_func, freq = widgets.FloatSlider(value=7.5,
                                               min=1,
                                               max=5.0,
                                               step=0.5))

将滑块移动到4.0后,我有:

enter image description here

我只想在移动滑块时改变一个图形。 我怎样才能做到这一点?

(我使用的是Python2.7和MatplotLib2.0,我刚刚将notebook和jupyter更新到最新版本。如果需要进一步的信息,请告诉我。)


Tags: import绘图参数plotmatplotlib部件asnp
2条回答

这是个问题(?)在jupyter和/或ipywidgets的最后一个版本中引入。我找到的一个解决方法是在plot_func的末尾添加plt.show()行。

如果你想改变这个数字,而不是创建一个新的数字,我可以建议如下方法:

  1. 使用交互式后端;%matplotlib notebook
  2. 更新绘图中的线,而不是绘制新的线。

所以代码可能是这样的:

%matplotlib notebook
from ipywidgets import *
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
line, = ax.plot(x, np.sin(x))

def update(w = 1.0):
    line.set_ydata(np.sin(w * x))
    fig.canvas.draw_idle()

interact(update);

enter image description here

或者,您可以使用plt.show()作为this answer

相关问题 更多 >