使用%matplotlib笔记本时,Graph和ipywidget不能位于相同的代码单元格中

时间:2016-03-17 11:02:06

标签: matplotlib ipython jupyter-notebook ipywidgets

我想制作一个数字并用ipywidgets以交互方式进行更改。 当我使用%matplotlib notebook时,小部件调用需要位于单独的代码单元格中,这是奇怪的。这是无效的代码

import matplotlib.pyplot as plt
from matplotlib.patches import Circle
%matplotlib notebook

fig = plt.figure(figsize=(6, 6))
ax1 = plt.subplot(111, aspect='equal')
ax1.set_xlim(-5,5)
ax1.set_ylim(-5,5)
circ = Circle((0,0), radius=1)
ax1.add_patch(circ)

def change_radius(r=1):
    circ.set_radius(r)

from ipywidgets import interact
interact(change_radius, r=(1.0, 5))

仅当最后两行位于单独的代码单元格中时才有效,但随后代码单元格将小部件与图形分开。有人知道如何让它在%matplotlib notebook的一个代码单元中工作吗?

1 个答案:

答案 0 :(得分:2)

您应该使用display(fig)中的change_radius()明确调用该数字:

import matplotlib.pyplot as plt
from matplotlib.patches import Circle
from IPython.display import display
%matplotlib notebook

fig = plt.figure(figsize=(6, 6))
ax1 = plt.subplot(111, aspect='equal')
ax1.set_xlim(-5,5)
ax1.set_ylim(-5,5)
circ = Circle((0,0), radius=1)
ax1.add_patch(circ)

def change_radius(r=1):
    circ.set_radius(r)
    display(fig)

from ipywidgets import interact
interact(change_radius, r=(1.0, 5))