matplotlib中文显示问题的解决

法一: python

我发现上面的方法并不能彻底使得sage支持中文,首先,sage对中文的支持体如今三个方面,matplotlib,sage本身的plot,latex。暂时我能作到的就是matplotlib这个,其余两个的中文支持我还不知道该怎么作。 ubuntu

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

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置于前面,就能使得优先使用中文字体了。 编码

 

法二: spa

matplotlib中文显示问题的解决

今天忙了一下午,直到如今才终于把这个问题解决了。网上解决的办法不少,可是他们没有说彻底,或者说,有些东西变了。 code

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

 

仍是说说问题的解决吧。 教程

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

找到以后,复制,而后粘贴到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自带的微软雅黑的字体

相关文章
相关标签/搜索