在Jupyter Notebook中交互式的matplotlib图表

5
下面的代码片段在ipython控制台中能正常工作:
> anaconda3/bin/ipython3
In [1]: import matplotlib.pyplot as plt
        import pandas as pd
        import numpy as np
In [2]: plt.ion()
In [3]: pd.Series(np.sin(np.arange(0, 10, 0.1))).plot() # plot window appears
In [4]: pd.Series(np.cos(np.arange(0, 10, 0.1))).plot() # second line is drawn in the same window

终端没有被阻塞。如何在Jupyter笔记本中获得相同的行为?也就是说,一个外部交互式绘图窗口,可以从笔记本逐步绘制。

相同的代码片段不会在笔记本中显示任何绘图。执行plt.show()将显示外部窗口,但会阻止执行直到关闭窗口。

提前致谢。

3个回答

10

原来即使不需要切换后端,笔记本中也需要使用 %matplotlib 魔法命令,之后笔记本的行为就与控制台一样了。例如,在笔记本中执行以下代码作为第一个单元格:

%matplotlib
import matplotlib.pyplot as plt
plt.ion()

@Minato 添加了示例。 - qsd
@garyp 不是我记得的,所以才问。我想我是通过使用%magic来偶然发现它的,而那与此无关。 - qsd
示例添加在哪里? 我仍然将图绘制在笔记本之外的新图中。 - Pablo Ruiz Ruiz

1

魔术命令 %matplotlib 可以让 Jupyter Notebook 使用 Qt5Agg 交互式后端。


0
为了模拟带有交互式后端的阻塞调用plt.show(),您需要等待直到您的图形处于活动状态。
# provided interactive backend
# e.g. %matplotlib qt5
fig = plt.figure()

plt.show()

try:
    while fig.number in plt.get_fignums():
        plt.pause(0.1)
except:
    plt.close(fig.number)
    raise

异常情况会在用户在Jupyter Notebook中按下中断内核(也称为停止)按钮时关闭图形窗口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接