python - Matplotlib 图未使用 ipywidgets 滑块更新
问题描述
我有以下代码来生成一个简单的图表。
%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)
代码生成图就好了 - 输出
但是当我拖动滑块时,图形不会更新。关于为什么会这样的任何想法?
解决方案
注意:您的代码实际上对我来说是开箱即用的,因此可能值得更新您的依赖项并查看是否可以修复它。
但是,您要更改的主要内容是调用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
还有一个基于小部件的笔记本后端(也可以在 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))
推荐阅读
- rest - 我应该使用在 GET 请求上编码的正文 url 吗?
- reactjs - React 独特的 key 道具
- python - 使用 Panda 在 excel 中导入 .txt 时,数据行的第一列被删除
- unreal-engine4 - Fog disables/undermines spot light between sub-levels
- unity3d - Import .ai (illustrator file) in Unity and display them
- javascript - Determine closest ancestor between list of classes
- tailwind-css - Using tailwindcss with Opencomponents
- activemq-artemis - Avoid WildFly's artemis automatic table creation when journal-datasource is configured
- c++ - (Vulkan) vkAcquireNextImageKHR takes so long when VK_PRESENT_MODE_FIFO_KHR choosen for present mode
- c - How restart USB endpoint STALL error without addicional library in C