在这里,我有一个与熊猫有关的情节,如下:
most_active_posts.plot(x = 'title',y = 'active_span',kind = 'barh')
most_active_posts
是带有索引的数据框的对象,我想要一个包含两列的简单二维图,一列是'title'
,另一列是'active_span'
。
title
是字符串的类型,包含中文字符,而active_span
是整数类型。
如何正常显示中文字符?
答案 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()
它可以帮助您处理matplotlib中文字体!这是github页面:
https://github.com/201528015329004/pyplotz
还有一些方便的例子:
https://github.com/201528015329004/pyplotz/blob/master/examples/quick_start.ipynb
答案 2 :(得分:2)
Lib\site-packages\matplotlib\mpl-data
,然后编辑文件matplotlibrc
。 font.family
和font.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()
这是图:
我实际上无法保存文件并显示字符。目前还不确定为什么,但这可能会让你开始。
答案 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()