pandas 情节未在 ipython 笔记本中显示为内联

pandas plot doesn't show in ipython notebook as inline

我试图在 ipython 笔记本内联中绘制图形,但是 .plot() 方法只显示对象信息,因为

<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 显示相同。

改变

ipython notebook --matplotlib=inline 

ipython notebook --matplotlib inline 

注意没有 = 标志。

我将根据我上面的评论给你举个例子:

你有这样的东西:

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

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

在这里我发现这是 matplotlib 1.fontmanager.py 中的错误。4.x,修复了 matplotlib 的 this 开发版本并且它有效。

很抱歉没能早点找到它。谢谢大家。