10

When I draw a figure with Chinese Character label in Python 3, it doesn't work correctly:

Screenshot]

My code:

fig = pd.DataFrame({
    '债券收益率':bond,
    '债券型基金收益率':bondFunds,
    '被动指数型基金收益率':indexFunds,
    '总收益率':ret})
fig.plot()
plt.legend(loc=0)
plt.title('债券收益率',
          fontproperties='SimHei',
          fontsize='xx-large')
plt.grid(True)
plt.axis('tight')
SiHa
  • 7,830
  • 13
  • 34
  • 43
DachuanZhao
  • 1,181
  • 3
  • 15
  • 34
  • [This](https://pythonpath.wordpress.com/2013/09/16/chinese-in-matplotlib/) works, provided you have the `SimHei` font installed. Note how they pass the font properties to the legend function. – Kartik Sep 22 '16 at 05:57
  • Yes,It works!Thanks a lot!@Kartik – DachuanZhao Sep 22 '16 at 06:18
  • Possible duplicate of [How to display Chinese in pandas plot?](https://stackoverflow.com/questions/21307832/how-to-display-chinese-in-pandas-plot) – jdhao Apr 10 '18 at 01:58

4 Answers4

14

You need to explicitly pass the font properties to legend function using the prop kwag:

from matplotlib import font_manager

fontP = font_manager.FontProperties()
fontP.set_family('SimHei')
fontP.set_size(14)

fig = pd.DataFrame({
    '债券收益率':bond,
    '债券型基金收益率':bondFunds,
    '被动指数型基金收益率':indexFunds,
    '总收益率':ret})
fig.plot()

# Note the next lines
plt.legend(loc=0, prop=fontP)
plt.title('债券收益率', fontproperties=fontP)

plt.grid(True)
plt.axis('tight')

Source

Kartik
  • 8,347
  • 39
  • 73
6

Try this:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # Or any other Chinese characters
Raphael Hu
  • 61
  • 1
  • 1
5

Extending on Raphael's answer, for those using macOS, the system Chinese fonts is Heiti. To check if you have it:

import matplotlib
print([f for f in matplotlib.font_manager.fontManager.ttflist if 'Heiti' in f.name])

Then, do the following:

matplotlib.rcParams['font.family'] = ['Heiti TC']

For more here a link.

jialin
  • 139
  • 1
  • 5
2

macbook pro m1 solved by:

import matplotlib

matplotlib.rcParams['font.family'] = ['Heiti TC']
Liki Crus
  • 1,901
  • 5
  • 16
  • 27
xie bruce
  • 45
  • 3