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

Posted

技术标签:

【中文标题】熊猫图在 ipython 笔记本中未显示为内联【英文标题】:pandas plot doesn't show in ipython notebook as inline 【发布时间】:2015-04-07 17:27:38 【问题描述】:

我正在尝试在 ipython notebook 中内联绘制图形,但 .plot() methos 只显示对象信息,如

<matplotlib.axes._subplots.AxesSubplot at 0x10d8740d0>

但没有图表。我也可以用plt.show() 让它显示图形,但我想内联。所以我尝试了%matplotlib inlineipython notebook --matplotlib=inline,但没有任何帮助。

如果我使用%matplotlib inline,则显示.plot()

/Users/<username>/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/IPython/core/formatters.py:239: 
FormatterWarning: Exception in image/png formatter: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) FormatterWarning,

并且使用ipython notebook --matplotlib=inline 显示相同。

【问题讨论】:

认为我们需要更多信息,展示您的代码、导入和平台... 您在使用% matplotlib inline 时描述的错误是由于处理Unicode 和字符串的问题。可能,您有用latin-1 编码的字符,并且转换正在尝试使用decode。但是,decode 正在使用默认编码 ascii 将您的字符转换为 unicode,并且由于在 ascii 中找不到该字符,因此转换失败。在将数据传递给 matplotlib 之前,您应该尝试使用 decode ("\xe2".decode(encoding='latin-1')) 将字符串转换为 unicode。 【参考方案1】:

改变

ipython notebook --matplotlib=inline 

ipython notebook --matplotlib inline 

注意没有= 标志。

【讨论】:

【参考方案2】:

我会根据我上面的评论给你一个例子:

你有这样的东西:

import matplotlib.pyplot as plt

%matplotlib inline

legend = "\xe2"

plt.plot(range(5), range(5))
plt.legend([legend])

导致:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)

正如我所说,这是因为 matplotlib 想要使用 unicode 类型的字符串。因此,在绘图过程中,matplotlib 尝试使用 decode 解码您的字符串以将其转换为 unicode。但是,decodeascii 作为默认编码,并且由于您的字符不属于ascii,因此会显示错误。解决办法是自己用合适的编码解码字符串:

import matplotlib.pyplot as plt

%matplotlib inline

legend = "\xe2".decode(encoding='latin-1')

plt.plot(range(5), range(5))
plt.legend([legend])

顺便说一句,关于使用ipython notebook --matplotlib inline,这样做被认为是不好的做法,因为你隐藏了你为了获得结果笔记本所做的事情。最好在笔记本中包含%matplotlib inline

【讨论】:

【参考方案3】:

感谢您的所有帮助。 以上方法我都试过了,还是不行。

在这里我发现这是 matplotlib 1.4.x 中 fontmanager.py 中的错误,用 this matplotlib 的开发版本修复,它工作正常。

很抱歉,我之前没能找到它。谢谢大家。

【讨论】:

以上是关于熊猫图在 ipython 笔记本中未显示为内联的主要内容,如果未能解决你的问题,请参考以下文章

在 IPython 中使用自定义样式在函数内部显示熊猫数据框

ipython笔记本垂直查看宽熊猫数据帧

你如何更新 Ipython 中的内联图像?

可以在不使用内联绘图的情况下远程访问 IPython Notebook 吗?

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

内嵌图像质量低