在利用matplotlib繪圖時,常常需要添加圖例與坐標(biāo)軸名稱,而在論文中,對中英文有嚴(yán)格的不同的字體要求,但默認(rèn)的方法中(如下所示),無法分別為中文、英文指定不同字體(如下圖),因此需要借助其他方法。 # -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 在python中,字體單位貌似是px,與pt間的換算關(guān)系為1pt=4/3px
simsun = FontProperities(fname=r'C:\Windows\Fonts\simsun.ttc', size=10)
plt.xlabel(u'Di距離', fontproperties=simsun)
//////////////////////// 經(jīng)過摸索后發(fā)現(xiàn)text函數(shù)能夠在指定位置按照指定字體與大小顯示文字,因此可以通過調(diào)整文字位置來實現(xiàn)xlabel的功能并且能夠按照指定字體分別顯示中英文(如下圖)。代碼如下: # -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from pylab import mpl, text
from matplotlib.font_manager import FontProperties
import numpy as np
# windows下matplotlib顯示中文一般有問題,需要專門進(jìn)行設(shè)置才能正常顯示
# 下面是兩種設(shè)置的方式,使用時的參數(shù)也略有區(qū)別,在此不具體介紹
# 但需提前設(shè)置好,使得能夠顯示中文,否則中文字符位置顯示為方框
simsun = FontProperties(fname=r'C:\Windows\Fonts\simsun.ttc', size=10) # 宋體
roman = FontProperties(fname=r'C:\Windows\Fonts\times.ttf', size=10) # Times new roman
mpl.rcParams['font.sans-serif'] = ['SimSun']
fontcn = {'family': 'SimSun','size': 10} # 1pt = 4/3px
fonten = {'family':'Times New Roman','size': 10}
plt.figure(1)
ax1 = plt.subplot(121) # 左圖
ax2 = plt.subplot(122) # 右圖
plt.sca(ax1)
plt.xlim(0,150)
plt.ylim(0,0.08)
plt.xticks(range(0,160,10),rotation=0)
# 設(shè)置斜體-Times New Roman字體
text(60, -0.01, u'Di', style='italic', fontdict=fonten)
text(70, -0.01, u'距離', fontdict=fontcn)
text(85, -0.01, u'(km)', fontdict=fonten)
plt.ylabel(u"核密度", fontproperties=simsun)
plt.title(u"a.核密度")
plt.sca(ax2)
plt.xlim(0,150)
plt.ylim(0,1)
plt.xticks(range(0,160,10),rotation=0)
plt.yticks(np.linspace(0,1,11))
text(60, -0.13, u'Di', style='italic', fontdict=fonten)
text(70, -0.13, u'距離', fontdict=fontcn)
text(85, -0.13, u'(km)', fontdict=fonten)
plt.ylabel(u"累積概率", fontproperties=simsun)
plt.title(u"b.累積概率")
plt.show()
上述代碼可直接運行,字體設(shè)置無誤即可得到上圖中的結(jié)果,但Di距離(km) 可能會重疊或者空隙較大,這是正常情況,需要調(diào)整文字位置。text 函數(shù)的前兩個參數(shù)為其位置參數(shù),都與其x軸、y軸坐標(biāo)刻度有關(guān),以<text(70, -0.01, u’距離’, fontdict=fontcn) 為例,70說明其水平方向位置在坐標(biāo)軸70處,-0.01說明其垂直方向位置在-0.01刻度處,按照這個規(guī)則即可以多種字體顯示多段文字。
|