我正在努力在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)
但在这种情况下,每次在窗口小部件中选择新值时,都会重绘整个图形
是否有可能从同一个小区顺利启动所有内容? 任何想法都非常受欢迎!