Skip to content Skip to sidebar Skip to footer

How To Display Chinese In Matplotlib Plot

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,

Solution 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.

Solution 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

Solution 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.

Solution 4:

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

I just grabbed some random characters:

In[40]: dfOut[40]: 
   0title00112233[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:

enter image description here

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.

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

Post a Comment for "How To Display Chinese In Matplotlib Plot"