Jupyter / ipython notebook:如何使用交互式小部件阻止绘图重绘

时间:2016-02-29 16:15:16

标签: python-2.7 matplotlib redraw jupyter-notebook

我正在努力在jupyter笔记本中构建一个交互式工具。根据此处的讨论:IPython Notebook widgets for Matplotlib interactivity,我构建了以下示例:

%matplotlib notebook
import matplotlib.pyplot as plt
from ipywidgets import Select,interactive,Dropdown
from IPython.display import display

fig,ax = plt.subplots()
ax.plot(range(5))

vline = ax.axvline(1, color='k')
hline = ax.axhline(0.5, color='k')

def set_cursor(x, y):
    vline.set_xdata((x, x))
    hline.set_ydata((y, y))
    ax.figure.canvas.draw_idle()

interactive(set_cursor, x=ax.get_xlim(), y=ax.get_ylim())

除了最后一行(交互式...)必须在不同的单元格中运行之外,它的效果非常好。 如果我想在同一个单元格中启动所有内容(或者如果使用类方法,则从相同的对象启动,这是我最终想要的),我必须使用以下代码:

%matplotlib notebook
import matplotlib.pyplot as plt
from ipywidgets import Select,interactive,Dropdown
from IPython.display import display

fig,ax = plt.subplots()
ax.plot(range(5))

vline = ax.axvline(1, color='k')
hline = ax.axhline(0.5, color='k')

def set_cursor(x, y):
    vline.set_xdata((x, x))
    hline.set_ydata((y, y))
    ax.figure.canvas.draw_idle()
    display(fig)

tool = interactive(set_cursor, x=ax.get_xlim(), y=ax.get_ylim())
display(tool)

但在这种情况下,每次在窗口小部件中选择新值时,都会重绘整个图形

是否有可能从同一个小区顺利启动所有内容? 任何想法都非常受欢迎!

0 个答案:

没有答案