matplotlib中文显示问题的解决

法一:

我发现上面的方法并不能完全使得sage支持中文,首先,sage对中文的支持体现在三个方面,matplotlib,sage自己的plot,latex。暂时我能做到的就是matplotlib这个,其他两个的中文支持我还不知道该怎么做。

另外,有点麻烦的是,sage不能使用系统的字体,所以我上面说的方法还需要稍作修改。首先,我们到我们的windows系统的C盘的windows/Fonts文件夹里找到msyh.ttf这个字体文件,这是微软雅黑的字体。然后将这个文件复制到SAGE/local/lib/python/site-packages/matplotlib/mpl-data/fonts/ttf 这里,然后,在matplotlibrc这个文件夹的里的一行改为如下:

font.serif : Microsoft YaHei,Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif

此处将Microsoft YaHei置于前面,就能使得优先使用中文字体了。

 

法二:

matplotlib中文显示问题的解决

今天忙了一下午,直到现在才终于把这个问题解决了。网上解决的办法很多,但是他们没有说完全,或者说,有些东西变了。

matplotlib真的很奇怪呀,居然不原生支持Unicode编码,现在的开源项目不支持unicode,真的是很奇怪。难道是只打算开发给欧美人用的么。

 

还是说说问题的解决吧。

首先要找到matplotlibrc这个文件,我的系统是ubuntu的,网上的教程不知道为什么,他们系统的这个文件的路径和我的是不一样的。他们的在/usr/share/matplotlib这个文件夹里面,而我的是在/etc/这个文件夹里面。我是用apt-get安装的,估计他们是用easy_install之类的方式安装的,或者matplotlib新版修改了这个文件的路径,反正是让我找了好久呀。

找到之后,复制,然后粘贴到home目录下的隐藏文件夹(Ctrl+H可以显示出来).matplotlib.其实不复制也是可以的,但是那样修改要root权限,而且如果搞错了,就麻烦了。所以复制比较保险。然后打开这个文件,找到font.family,font.style,font.variant ,font.weight ,font.stretch 这几个,把他们前面的#号去掉。这里最最重要的是

font.family : serif 这一句,冒号后面一定一定要修改为serif,我之前试过monospace,sans-serif,发现汉字会变成方块显示。

然后找到font.serif 这一行,把它前面的#号也去掉,在冒号后面加一个中文字体,如 AR PL UMing CN,(冒号后面表示的是serif这一类型的字体)。

再找到axes.unicode_minus 这一行,把它前面的#号也去掉,然后把后面的True改为False(不然的话,减号会变成方块了)。

保存文件,然后,一定要记得,中文字符串前要有一个u,表示unicode的意思。运行下面的代码试试成功了否:

-*- coding:utf-8 -*-
#! /usr/local/bin/python
importmatplotlib.pyplot as plt
fig=plt.figure()
fig.suptitle('bold figure suptitle', fontsize=14, fontweight='bold')
ax=fig.add_subplot(111)
fig.subplots_adjust(top=0.85)
ax.set_title(u'我在这里看着你')
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.text(3,8,'boxed italics text in data coords', style='italic',
bbox={'facecolor':'red','alpha':0.5,'pad':10})
ax.text(2,6, r'an equation: $E=mc^2$', fontsize=15)
ax.text(3,2,unicode('unicode: Institut f374r Festk366rperphysik','latin-1'))
ax.text(0.95,0.01,'colored text in axes coords',
verticalalignment='bottom', horizontalalignment='right',
transform=ax.transAxes,
color='green', fontsize=15)
ax.plot([2], [1],'o')
ax.annotate('annotate', xy=(2,1), xytext=(3,4),
arrowprops=dict(facecolor='black', shrink=0.05))
ax.axis([0,10,0,10])
plt.show()
 

再说一遍,这次解决这个问题,总共有两个坑,第一个:matplotlibrc文件在/etc文件夹里面,而不是网上大多数文章写的那个地方。(可能用其他方法安装matplotlib就在那个地方,所以两个地方都找找吧)。第二个:font.family一定要设置为serif,否则和没修改是一样的。

 法三:

在实际项目中导入字体,即指定字体显示

 

#-*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib
zhfont1 = matplotlib.font_manager.FontProperties(fname='E:\\msyh.ttf')

fig = plt.figure()
fig.suptitle('bold figure suptitle', fontsize=14, fontweight='bold')
ax = fig.add_subplot(111)
fig.subplots_adjust(top=0.85)
ax.set_title(u'我在这里看着你',fontproperties=zhfont1)
ax.set_xlabel(u'我在这里看着你',fontproperties=zhfont1)
ax.set_ylabel('ylabel')
ax.text(3, 8, 'boxed italics text in data coords', style='italic', bbox={'facecolor':'red', 'alpha':0.5, 'pad':10})
ax.text(2, 6, r'an equation: $E=mc^2$', fontsize=15)
ax.text(3, 2, unicode('unicode: Institut f374r Festk366rperphysik', 'latin-1'))
ax.text(0.95, 0.01, 'colored text in axes coords', verticalalignment='bottom', horizontalalignment='right',transform=ax.transAxes,color='green', fontsize=15)
ax.plot([2], [1], 'o')
ax.annotate('annotate', xy=(2, 1), xytext=(3, 4),arrowprops=dict(facecolor='black', shrink=0.05))
ax.axis([0, 10, 0, 10])
plt.show()

'E:\\msyh.ttf' 是windows自带的微软雅黑的字体


转载于:https://my.oschina.net/Chaos777/blog/177739

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值