我一直在尝试使用matplotlib的文本或用普通话中文注释模块。不知何故,它最终显示框。有什么想法吗?
答案 0 :(得分:16)
这是一个适用于Python 2.7和Python 3.3的解决方案,使用text
和annotate
方法与中文。
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
被硬编码为字体文件,而ChineseFont2
按姓氏抓取字体(但ChineseFont2
我必须尝试一对才能找到一个可行的字体)。这两个都是我的系统特有的,因为它们引用了我的字体,所以你很可能需要将它们更改为引用系统中的字体/路径。
默认加载的字体似乎不支持中文字符,因此主要是字体选择问题。
答案 1 :(得分:3)
另一种解决方案是使用使用XeTeX的pgf
后端。这允许直接使用UTF-8:
#!/usr/bin/env python2
# -*- coding:utf-8 -*-
import matplotlib
matplotlib.use("pgf")
pgf_with_custom_preamble = {
# "font.size": 18,
"pgf.rcfonts": False,
"text.usetex": True,
"pgf.preamble": [
# math setup:
r"\usepackage{unicode-math}",
# fonts setup:
r"\setmainfont{WenQuanYi Zen Hei}",
r"\setsansfont{WenQuanYi Zen Hei}",
r"\setmonofont{WenQuanYi Zen Hei Mono}",
],
}
matplotlib.rcParams.update(pgf_with_custom_preamble)
from matplotlib import pyplot as plt
x = range(5)
y = range(5)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, label=u"我")
ax.legend(u"中")
ax.set_xlabel(u"是")
ax.set_ylabel(u"写")
ax.set_title(u"得")
ax.text(3, 2, u'到')
ax.annotate(u'的', xy=(2, 1), xytext=(3, 1),
arrowprops=dict(arrowstyle="<|-", connectionstyle="arc3", color='k'))
fig.savefig("pgf-mwe.png")
结果:
此解决方案需要在您的系统上安装matplotlib 1.2+并且可能需要安装XeTeX。获得有效XeTeX的最简单方法是使用任何现代LaTeX发行版:TeXLive(适用于所有平台)或MiKTeX(仅限Windows)。
答案 2 :(得分:1)
matplotlib.rc('font', family='Source Han Sans CN')
ax = quarterly_gdp.plot(title='国内生产总值')
您只需设置matplotlib的字体系列,然后就可以使用中文标签进行绘图。我已将字体设置为Source Han Sans CN,因为它是我电脑上唯一可用的中文字体。
您可以通过命令fc-list :lang=zh
检查可用字体。