我想用两个不同的独立图制作一个交互式 jupyter 笔记本。我还想让这个笔记本易于我的同事访问和运行,因此瞧。我最接近完成这项工作的样子是这样的:
单元格 1:
import ipywidgets
import matplotlib.pyplot as plt
%matplotlib widget
单元格 2:
fig, ax = plt.subplots(figsize = (9.5,5))
def plot_figure_1(slider_val):
ax.clear()
xs = list(range(slider_val))
ax.plot(xs, [x**2 for x in xs])
plt.show()
interactive_plot_1 = ipywidgets.interactive(plot_figure_1,
slider_val = ipywidgets.IntSlider(value=100, min=10, max=200,
description = "A slider",
continuous_update = False))
display(interactive_plot_1)
单元格 3:
fig2, ax2 = plt.subplots(figsize = (9.5,5))
def plot_figure_2(slider_val):
ax2.clear()
xs2 = list(range(slider_val))
ax2.plot(xs2, [x**2 for x in xs2])
plt.show()
interactive_plot_2 = ipywidgets.interactive(plot_figure_2,
slider_val = ipywidgets.IntSlider(value=100, min=10, max=200,
description = "A slider",
continuous_update = False))
display(interactive_plot_2)
这在 jupyter 笔记本中运行良好,但是当我使用 Voila 将其转换为实时笔记本时,我遇到了两个问题:
(主要问题)这两个单元格不再独立 - 每当我移动任一滑块时,两个单元格都会更新,并且两个单元格都会根据第二个滑块更新。
(一个小问题)在我与相应的小部件交互之前,屏幕上都不会出现图。
我认为这个问题与使用plt.show()
显示有关,但如果我注释掉,plt.show()
那么这两个图都会从 Voila-ed 版本中消失。如果我plt.show()
用fig.canvas.draw()
(and fig2.canvas.draw()
) 替换,那么这两个图都无法在笔记本版本和Voila 版本中显示。
如何让两个图以易于访问的方式交互(和独立)显示和工作?
相关版本:
- OSX 10.15.7
- 蟒蛇 3.9.5
- Matplotlib 3.4.2
- Ipywidgets 7.6.5
- IPython 7.27.0
- Jupyterlab 3.2.4
- 瞧 0.2.16