1. 程式人生 > >matplotlib設定中英文多種字型混合座標軸名稱

matplotlib設定中英文多種字型混合座標軸名稱

以後有文章都會更新到個人部落格中,個人部落格中的功能可以自己設計,因此會更豐富點,介面也好看一些,且無廣告,建議優先訪問個人部落格

在利用matplotlib繪圖時,常常需要新增圖例與座標軸名稱,而在論文中,對中英文有嚴格的不同的字型要求,但預設的方法中(如下所示),無法分別為中文、英文指定不同字型(如下圖),因此需要藉助其他方法。

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 在python中,字型單位貌似是px,與pt間的換算關係為1pt=4/3px
simsun = FontProperities(fname=r'C:\Windows\Fonts\simsun.ttc', size=10) plt.xlabel(u'Di距離', fontproperties=simsun)

圖1
經過摸索後發現text函式能夠在指定位置按照指定字型與大小顯示文字,因此可以通過調整文字位置來實現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顯示中文一般有問題,需要專門進行設定才能正常顯示 # 下面是兩種設定的方式,使用時的引數也略有區別,在此不具體介紹 # 但需提前設定好,使得能夠顯示中文,否則中文字元位置顯示為方框 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) # 設定斜體-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()

圖2

上述程式碼可直接執行,字型設定無誤即可得到上圖中的結果,但Di距離(km)可能會重疊或者空隙較大,這是正常情況,需要調整文字位置。text函式的前兩個引數為其位置引數,都與其x軸、y軸座標刻度有關,以<text(70, -0.01, u'距離', fontdict=fontcn)為例,70說明其水平方向位置在座標軸70處,-0.01說明其垂直方向位置在-0.01刻度處,按照這個規則即可以多種字型顯示多段文字。

以上,歡迎留言交流~