Python Matplotlib图表汉字显示成框框(box)
(2015-06-09 22:40:46)
标签:
matplotlib汉字乱码seaborn |
问题
在使用Matplotlib生成图表时,默认不支持汉字,所有汉字都会显示成框框。
解决办法
方法一:代码中指定中文字体
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib
zhfont1 =
matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/cjkunifonts-ukai/ukai.ttc')
plt.xlabel(u"横坐标xlabel",fontproperties=zhfont1)
方法二:rc文件中指定缺省字体
- 在python的安装目录中找到配置文件:
%Python_Home%\Lib\site-packages\matplotlib\mpl-data\matplotlibrc (如,我的是在D:\Python32\Lib\site-packages\matplotlib\mpl-data),用任意文本编辑器打开。 - 找到“#font.family”, 将其注释去掉
- 找到“#font.sans-serif”, 将其注释去掉,并将Microsoft YaHei添加到冒号后面的最前面,注意还要再加一个英文逗号(,)
- 为保险起见,到C:\Windows\Fonts\中找到微软雅黑对应的字体文件msyh.ttf(Window 8系统是msyh.ttc,也可从网上下载msyh.ttf),将其复制到%Python_Home%\Lib\site-packages\matplotlib\mpl-data\fonts\ttf\目录下
测试代码
#coding: utf-8
"""
在不同的坐标系中添加文字。
"""
import matplotlib.pyplot as plt
import numpy as np
#import seaborn as sns
x = np.linspace(-1,1,10)
y = x**2
fig = plt.figure(figsize=(8, 4))
ax = plt.subplot(111)
plt.plot(x,y)
for i, (_x, _y) in enumerate(zip(x, y)):
plt.text(0.5, 0.8, u"子图坐标系中的文字", color="blue", ha="center", transform=ax.transAxes) #{2}
plt.figtext(0.1, 0.92, u"图表坐标系中的文字", color="green",fontproperties='Microsoft YaHei') #{3}
plt.show()
Reference
http://blog.csdn.net/laoyaotask/article/details/22117745