How to display Chinese in pandas plot?

孤街浪徒 提交于 2019-11-28 08:35:22

问题


Here, I have a plot work to do with pandas, like this :

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

most_active_posts is an object of dataframe with index, I want a simple two-dimentional plot with two columns, one is 'title' and the other is 'active_span'.

title is type of string, which contains Chinese characters, while active_span is type of integer .

How can I display Chinese characters normally?


回答1:


My work-around is like this:

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()

Basically, you need to specify a valid font for Chinese characters.




回答2:


I find a python library designed for fixing Chinese display in pip. You can download it using the command in your terminal:

pip install pyplotz

And you can write the following code instead(full code):

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

And it can help you handle matplotlib Chinese font for you! This is the github page:

https://github.com/201528015329004/pyplotz

And there are some handy examples:

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




回答3:


  1. Enter the directory Lib\site-packages\matplotlib\mpl-data, and edit the file matplotlibrc.
  2. Locate font.family and font.sans-serif then uncomment both of them and inset Microsoft YaHei after font.sans-serif.



回答4:


I think you want the characters to be the labels on the plot right?

I just grabbed some random characters:

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

[4 rows x 2 columns]

I don't think there is a way to set y_ticklabels from df.plot(), but you can set them from the returned axes object:

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()

Here's the figure:

I'm not actually able to save the file and have the characters show up. Not sure why at the moment, but this may get you started.




回答5:


if you use pandas, you can use get_xticklabels to get labels and then set them with 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()


来源:https://stackoverflow.com/questions/21307832/how-to-display-chinese-in-pandas-plot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!