Jupyter Notebook:带有小部件的交互式绘图

2024-05-16

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

Example:

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 后,我有:

而我只想在移动滑块时改变一个数字。 我怎样才能实现这个目标?

(我正在使用 Python 2.7、matplotlib 2.0,并且我刚刚将笔记本和 jupyter 更新到最新版本。如果需要更多信息,请告诉我。)


当您想更改图形而不是创建新图形时,我可以建议以下方式:

  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);

或者你可以使用plt.show() as in 这个答案 https://stackoverflow.com/a/45694414/4124317.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jupyter Notebook:带有小部件的交互式绘图 的相关文章

随机推荐