python - 无法为 Line2D 设置动画
问题描述
我正在尝试为imshow
笔记本中的对象设置动画。代码相当长,但我认为这个带有 a 的较短示例Line2D
显示了同样的问题。首先,如果有帮助,我有一个可行的替代设计:
import matplotlib.pyplot as plt
import ipywidgets as widgets
series = [[3,1,1,2], [4,6,4,3], [2,6,8,7]]
def f(n):
fig,ax = plt.subplots()
ax.plot(series[n])
slider = widgets.IntSlider(min=0, max=len(series)-1)
widgets.interact(f, n=slider);
由于我不需要在每一帧重新创建图形和 ax,我的实际代码是:
import matplotlib.pyplot as plt
import ipywidgets as widgets
series = [[3,1,1,2], [4,6,4,3], [2,6,8,7]]
fig,ax = plt.subplots()
h = ax.plot(series[0]) # Some plot is required to get a Line2D object
h = h[0] # Line2D object
def f(n):
h.set_ydata(series[n])
slider = widgets.IntSlider(min=0, max=len(series)-1)
widgets.interact(f, n=slider);
此代码不起作用,显示了第一帧,但移动滑块时没有更新。我想知道这是否与h
在回调函数之外定义的事实有关f
,但在我的实际情况下,我在函数之外定义了其他变量,这些变量被正确处理。
解决方案
我不确定这是否是最好的方法,但您可以使用IPython.display
来更新图形。
以下对我有用:
from IPython.display import display
import matplotlib.pyplot as plt
import ipywidgets as widgets
series = [[3,1,1,2], [4,6,4,3], [2,6,8,7]]
fig,ax = plt.subplots()
h = ax.plot(series[0]) # Some plot is required to get a Line2D object
h = h[0] # Line2D object
plt.close() # Prevent normal display
def f(n):
h.set_ydata(series[n])
display(fig) # Display in widget
slider = widgets.IntSlider(min=0, max=len(series)-1)
widgets.interact(f, n=slider);
推荐阅读
- reactjs - 如何使用 Storage 为 AWS s3 做出反应,并通过返回链接从 s3 渲染我的视频
- django - 在 Django (v-2.2) 中导入 SQL 文件
- core-data - 将 SwiftUI 与核心数据一起使用
- python-3.x - sklearn 与 Linux-alpine 兼容吗?
- php - 如何在php中打印数组的名称
- debugging - 在 WinDbg 内存窗口中查看结构的语法?
- ios - 停止/暂停在 tableview 单元类中创建的 avplayer
- java - 在powermock的静态方法中模拟静态方法
- c# - MediaPlayer 并不总是在 UWP 应用中播放音频
- wordpress - Google Search Console - 验证失败