我正在尝试使用plt.show()
和ipywidgetsinteract()
函数滚动一些磁共振切片。通过缓慢移动滑块,我没有发现任何问题,但是当滑动速度加快一点时,会发现一个重要的延迟
下面是我正在使用的代码
def dicom_animation(x, volume):
fig = plt.figure(figsize=(8,8))
plt.imshow(volume['slices'][x]['pixel_array'], cmap=plt.cm.gray)
interact(dicom_animation, volume = fixed(a), x=IntSlider(round(len(a['slices'])/2,0), 0, (len(a['slices'])-1), layout=Layout(width='500px')))
而this是结果
我能做些什么来让滑得更快一点而不耽搁这么重要的时间吗
重新绘制图形和调用
plt.imshow
都是非常昂贵的操作,这正是减慢速度的原因。相反,您需要使用交互式matplotlib后端,然后使用类似set_data
的方法安装ipympl
ipympl是matplotlbi的一个交互式后端,可在jupyter nobteook和jupyterlab中使用。它有一个很好的示例笔记本,在这里解释了如何与其他小部件交互:https://github.com/matplotlib/ipympl/blob/0.6.1/examples/ipympl.ipynb
对于JupyterLab 3+来说,安装此软件非常容易,因此:
手动创建滑块
虽然
interact
很方便,但它并不适合ipympl,因为它希望在每次滑块更改时完全重新生成输出使用mpl交互
手动设置滑块可能会非常麻烦。因此,我编写了一个库,使使用小部件轻松控制交互式绘图。它负责创建滑块,并为您执行所有正确的操作,例如使用
set_data
。如果您不在jupyter笔记本电脑中,它还将使用matplotlib滑块,因此更便于携带就你而言,你会对imshow example感兴趣 或者,根据数据的结构,您也可以使用hyperslicer
你的例子是:
相关问题 更多 >
编程相关推荐