Matplotlib插图未使用ipywidget滑块进行更新 [英] Matplotlib figure is not updating with ipywidgets slider
本文介绍了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屋!
查看全文