Python 如何在ipywidgets布局中更新imshow?

Python 如何在ipywidgets布局中更新imshow?,python,matplotlib,animation,ipywidgets,matplotlib-widget,Python,Matplotlib,Animation,Ipywidgets,Matplotlib Widget,问题 我想显示一个链接到ipywidgets中播放按钮的滑块,然后从matplotlib更新imshow绘图。然而,我希望图像留在那里,只画改变了的艺术家,而不必清除输出来再次绘制所有内容。bqplot可以很好地处理这种情况,但是显示gridheatmap显示了编辑勾号标签和matplotlib能够很好地处理的其他设计部分的挑战。有些人使用了交互,但这种方法限制了我处理叛徒的自由 我的代码 slider=wd.IntSlider(值=0,最小值=0,最大值=49,连续更新=False) 播放按钮

问题

我想显示一个链接到ipywidgets中播放按钮的滑块,然后从matplotlib更新
imshow
绘图。然而,我希望图像留在那里,只画改变了的艺术家,而不必清除输出来再次绘制所有内容。bqplot可以很好地处理这种情况,但是显示gridheatmap显示了编辑勾号标签和matplotlib能够很好地处理的其他设计部分的挑战。有些人使用了
交互
,但这种方法限制了我处理叛徒的自由

我的代码

slider=wd.IntSlider(值=0,最小值=0,最大值=49,连续更新=False)
播放按钮=wd.play(
值=0,
最小值=0,
最大值=49,
步骤=1,
间隔=850,
description=“按播放”,
禁用=错误
)
def滑块_更新():
全球即时通讯
全球无花果
slider.value=change.new
label.value=“时间:{}”。格式(slider.value)
不包括:
新建_数据=随机_数据[:,:,slider.value]
im.set_数据(新_数据)
im.set\u clim(0,np.max(新数据))
背景=图canvas.copy_from_bbox(ax.bbox)
图canvas.flush_事件()
图canvas.restore_区域(背景)
ax.draw_艺术家(im)
图帆布布利特(ax.bbox)
plt.show(图)
label=wd.label(“时间:0”)
#观察滑块(滑块更新,“值”)
jslink((播放按钮,“值”),(滑块,“值”))
widget=wd.interactive(slider\u update,idx=slider)
out=wd.Output()
app=wd.VBox([wd.HBox([play_按钮、滑块、标签]),out])
显示(应用程序)
输出

预期输出

但该图像仅更新artiosts以获得平滑的动画(最后一幅图像是通过使用
显示(app,fig)
来完成的,它不符合我的要求


有人可以帮忙吗?

您需要使用交互式maptlotlib后端,或者是
%matplotlib notebook
或者
%matplotlib ipympl
查看这里的示例:最后,我编写了一个库,可以轻松更新imshow对象,请参见。对于通过数组进行索引的特定情况,有一个专门的d函数hyperslicer:如果使用ipympl,您还需要显示
fig.canvas
,因为
fig
对象将是png,但
fig.canvas
是一个jupyter小部件,它将update@lanhi我仍然无法更新它…我将后端更改为ipympl,并且能够将fig.canvas显示为wid进入ipywidgets布局。但它不是更新。您将需要使用交互式maptlotlib后端,
%matplotlib notebook
%matplotlib ipympl
查看此处的示例:最后,我编写了一个库,可以轻松更新imshow对象,请参阅。有关通过ar进行索引的具体情况,请参阅ray有一个专用的函数hyperslicer:如果使用ipympl,您还需要显示
fig.canvas
,因为
fig
对象将是一个png,但是
fig.canvas
是一个jupyter小部件,它将update@lanhi我仍然无法更新它…我将后端更改为ipympl,并且能够显示fig.canvas作为ipywidgets布局中的小部件。但它没有更新