如何在熊猫情节中显示中文?

时间:2014-01-23 12:13:17

标签: python pandas matplotlib fonts chinese-locale

在这里,我有一个与熊猫有关的情节,如下:

most_active_posts.plot(x = 'title',y = 'active_span',kind = 'barh')

most_active_posts是带有索引的数据框的对象,我想要一个包含两列的简单二维图,一列是'title',另一列是'active_span'

title是字符串的类型,包含中文字符,而active_span是整数类型。

如何正常显示中文字符?

5 个答案:

答案 0 :(得分:4)

我的解决方法是这样的:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
font = fm.FontProperties(fname='c:\\windows\\fonts\\simsun.ttc')  # speicify font
ax = most_active_posts.plot(x = 'title',y = 'active_span',kind = 'barh')
ax.set_xticklabels(most_active_posts['title'].str.decode('utf-8'), fontproperties=font)
plt.show()

基本上,您需要为中文字符指定有效字体。

答案 1 :(得分:3)

我发现了一个用于修复中文显示的python库。您可以使用终端中的命令下载它:

pip install pyplotz

您可以编写以下代码(完整代码):

from pyplotz.pyplotz import PyplotZ
pltz = PyplotZ()
pltz.enable_chinese()
most_active_posts.plot(x='title',y='active_span',kind='bar')
pltz.xticks(np.arange(len(df.cn)),df.cn,rotation=360)
pltz.legend()
pltz.show()

The result is like this

它可以帮助您处理matplotlib中文字体!这是github页面:

https://github.com/201528015329004/pyplotz

还有一些方便的例子:

https://github.com/201528015329004/pyplotz/blob/master/examples/quick_start.ipynb

答案 2 :(得分:2)

  1. 输入目录Lib\site-packages\matplotlib\mpl-data,然后编辑文件matplotlibrc
  2. 找到font.familyfont.sans-serif,然后在Microsoft YaHei之后取消注释font.sans-serif

答案 3 :(得分:0)

我认为你想让角色成为情节上的标签吗?

我抓住了一些随机字符:

In [40]: df
Out[40]: 
   0 title
0  0     뉵
1  1     뉑
2  2     늘
3  3     度

[4 rows x 2 columns]

我认为没有办法从y_ticklabels设置df.plot(),但您可以从返回的axes对象设置它们:

In [47]: ax = df.plot(kind='barh')

In [48]: ax.set_yticklabels(df['title'].str.decode('utf-8'))
Out[48]: 
[<matplotlib.text.Text at 0x1152abfd0>,
 <matplotlib.text.Text at 0x1152a3910>,
 <matplotlib.text.Text at 0x111c5e790>,
 <matplotlib.text.Text at 0x111c5ef10>]

In [49]: plt.draw()

这是图:

enter image description here

我实际上无法保存文件并显示字符。目前还不确定为什么,但这可能会让你开始。

答案 4 :(得分:0)

如果使用熊猫,则可以使用get_xticklabels获取标签,然后使用set_xticklabels进行设置。

import matplotlib.font_manager as mfm
import matplotlib.pyplot as plt

font_path = "/System/Library/Fonts/STHeiti Light.ttc"
prop = mfm.FontProperties(fname=font_path)
df = pd.read_csv("data.txt"]
figure, ax = plt.subplots(figsize=(12, 4))
tmp = df.boxplot(by='shop', column='buy', ax=ax)
ax.set_xticklabels(tmp.get_xticklabels(), fontproperties=prop)
plt.show()