欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matplotlib中文显示问题的解决

程序员文章站 2022-03-01 22:16:33
...

法一:

我发现上面的方法并不能完全使得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