加载中…
个人资料
疾风劲草心儿
疾风劲草心儿
  • 博客等级:
  • 博客积分:0
  • 博客访问:70,683
  • 关注人气:3
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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文件中指定缺省字体

  1. 在python的安装目录中找到配置文件: %Python_Home%\Lib\site-packages\matplotlib\mpl-data\matplotlibrc   (如,我的是在D:\Python32\Lib\site-packages\matplotlib\mpl-data),用任意文本编辑器打开。
  2. 找到“#font.family”, 将其注释去掉
  3. 找到“#font.sans-serif”, 将其注释去掉,并将Microsoft YaHei添加到冒号后面的最前面,注意还要再加一个英文逗号(,)
  4. 为保险起见,到C:\Windows\Fonts\中找到微软雅黑对应的字体文件msyh.ttf(Window 8系统是msyh.ttc,也可从网上下载msyh.ttf),将其复制到%Python_Home%\Lib\site-packages\matplotlib\mpl-data\fonts\ttf\目录下
注意:若引入了seaborn,则只能使用方法一


测试代码


#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(_x, _y, str(i), color="red", fontsize=i+10) #{1}

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有