0

我想用两个不同的独立图制作一个交互式 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 将其转换为实时笔记本时,我遇到了两个问题:

  1. (主要问题)这两个单元格不再独立 - 每当我移动任一滑块时,两个单元格都会更新,并且两个单元格都会根据第二个滑块更新。

  2. (一个小问题)在我与相应的小部件交互之前,屏幕上都不会出现图。

我认为这个问题与使用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
4

0 回答 0