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自帶的微軟雅黑的字體

相關文章
相關標籤/搜索