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
上一篇: 【matplotlib】解决中文显示问题
下一篇: Matplotlib基础学习笔记
推荐阅读
-
,能否帮忙下小弟解决这个有关问题吗,php foreach循环取到里面所有的值在静态页面显示
-
php的大哥大姐们,帮小弟我解决一个有关问题一下
-
Linux下IP设置脚本的实例及遇到问题解决办法
-
.htaccess怎么解决网站首页url的有关问题
-
PHP使用Memcache时模拟命名空间及缓存失效问题的解决_php实例
-
后台将图片传到服务器上的 但是在前台怎么显示,是不是代码的问题呢
-
php使用类继承解决代码重复的问题,php代码
-
PPS影音无法播放显示黑屏(只有声音/没有图像)的解决方法
-
Javaweb项目:网页搜索框输入中文关键字,出现乱码问题的解决方法
-
Oracle 丢失更新问题的解决方案