在 ipython 笔记本中显示 matplotlib 时出错

Posted

技术标签:

【中文标题】在 ipython 笔记本中显示 matplotlib 时出错【英文标题】:Error displaying a matplotlib in ipython notebook 【发布时间】:2017-01-25 08:16:33 【问题描述】:

我正在阅读 ipython 笔记本教程,它说要在单元格中运行它。 将 numpy 导入为 np 导入数学 将 matplotlib.pyplot 导入为 plt

x = np.linspace(0, 2*math.pi) 
plt.plot(x, np.sin(x), label=r'$\sin(x)$') 
plt.plot(x, np.cos(x), 'ro', label=r'$\cos(x)$') 
plt.title(r'Two plots in a graph') 
plt.legend() 

我应该得到一个实际的图表。是不是我得到了

<matplotlib.legend.Legend at 0x1124a2fd0>

我应该怎么做?

【问题讨论】:

plt.show() 应该添加到该脚本的末尾。 【参考方案1】:

尝试在您的笔记本中早先添加此语句,该语句指示 matplotlib 在何处呈现绘图(即作为嵌入笔记本中的 html 元素):

%matplotlib inline

这背后的故事只是 matplotlib 已经足够老,可以在 jupyter 和 ipython 笔记本流行之前就存在了。当时创建绘图的标准方法是编写脚本,运行它,然后获取图像文件作为结果。目前,可以在笔记本中轻松直接地看到相同的图像,但要以上面的补充“重新布线”声明为代价。

为了在笔记本中显示任何绘图,您可以将 plot 语句作为该块代码的最后一行(即绘图是返回值,然后由 jupyter 自动呈现),或使用 plt. show() 如 Abdou 在评论中所述。

另外,请注意您的代码中有 2 个图:

# Put these 2 in two separate notebook blocks to get 2 separate plots.
# As-is the first one will never get displayed
plt.plot(x, np.sin(x), label=r'$\sin(x)$') 
plt.plot(x, np.cos(x), 'ro', label=r'$\cos(x)$') 

如果您想将所有绘图渲染为一张图片(这很快就会在 matplotlib 恕我直言),请查看subplot documentation

为了使结果更漂亮,请在情节末尾添加;以避免丑陋 &lt;matplotlib.legend.Legend at 0x1124a2fd0&gt;

【讨论】:

以上是关于在 ipython 笔记本中显示 matplotlib 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ipython 笔记本中显示 PIL 图像

熊猫图在 ipython 笔记本中未显示为内联

在 IPython Notebook 中显示所有 pandas 数据框

在 ipython 中调用 pylab.savefig 而不显示

Ipython笔记本:在下一步之前“实时”显示for循环图像[重复]

代码中的ipython笔记本清除单元格输出