Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you i use mandarin characters in matplotlib?

I have been trying to use matplotlib's text or annotate modules with mandarin Chinese characters. Somehow it ends up showing boxes. Any idea on this ?

like image 671
Tanmoy Avatar asked Aug 29 '14 02:08

Tanmoy


Video Answer


1 Answers

Here is a solution that works for me on Python 2.7 and Python 3.3, using both text and annotate methods with Chinese.

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
fig = plt.figure()
ax = fig.add_subplot(111)
ChineseFont1 = FontProperties(fname = 'C:\\Windows\\Fonts\\simsun.ttc')
ChineseFont2 = FontProperties('SimHei')
ax.text(3, 2, u'我中文是写得到的', fontproperties = ChineseFont1)
ax.text(5, 1, u'我中文是写得到的', fontproperties = ChineseFont2)
ax.annotate(u'我中文是写得到的', xy=(2, 1), xytext=(3, 4),
            arrowprops=dict(facecolor='black', shrink=0.05),
            fontproperties = ChineseFont1)
ax.axis([0, 10, 0, 10])
plt.show()

ChineseFont1 is hard coded to a font file, while ChineseFont2 grabs a font by family name (but for ChineseFont2 I had to try a couple to find one that would work). Both of those are particular to my system, in that they reference fonts I have, so you quite likely will need to change them to reference fonts/paths on your system.

The font loaded by default doesn't seem to support Chinese characters, so it was primarily a font choice issue.

like image 196
Charles J. Daniels Avatar answered Nov 02 '22 05:11

Charles J. Daniels