Matplotlib插图未使用ipywidget滑块进行更新 [英] Matplotlib figure is not updating with ipywidgets slider

查看:0
本文介绍了Matplotlib插图未使用ipywidget滑块进行更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码来生成一个简单的图形。

%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))
    plt.show()

interact(update)

代码很好地生成了情节- output

但当我拖动滑块时,图形不会更新。你知道为什么会这样吗?

推荐答案

注意:您的代码实际上开箱即用,因此可能值得更新您的依赖项,看看是否可以修复它。

但是,您要更改的主要内容是调用fig.canvas.draw()而不是plt.show()

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

interact(update)

使用Ipympl

还有一个基于Widget的笔记本后端(也适用于jupyterlab):ipympl,您可以使用pip install ipympl安装和使用%matplotlib ipympl

一般来说,与笔记本后端相比,ipympl后端将更好地与其他小部件配合使用。

结合使用interactive和matplotlib

interactive的一个不幸后果是,它假设每次更改滑块值时都会完全重新生成输出。这并不总是与您正在使用的set_data方法配合得非常好。因此,您最好手动生成并连接滑块。我还会注意到,我已经编写了一个包,该包使用set_data命令自动将小部件连接到更新matplotlib绘图:https://mpl-interactions.readthedocs.io/en/stable/。使用该包,您的代码将是

%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import mpl_interactions.ipyplot as iplt

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

def f(x, w):
    return np.sin(w * x)

controls = iplt.plot(x, f, w=(1, 10))

这篇关于Matplotlib插图未使用ipywidget滑块进行更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆