系列文章目錄
第一章 Python常見庫matplotlib之畫圖文字的中文顯示
第二章 Python常見庫matplotlib之畫圖中各個模塊的含義及修改方式
第三章 Python常見庫matplotlib之多個子圖繪圖
前言
前兩章介紹了單張圖的繪圖操作,這一章介紹下在一張圖中畫多個圖的操作。我們把前一篇的程序稍微改動一下,上一篇中是將正弦函數(shù)和余弦函數(shù)畫在一張圖中,這一次我們將兩個曲線分別畫在不同的子圖中。
完整程序如下所示:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 指定字體
font_path = 'SIMSUN.TTC'
font_prop = fm.FontProperties(fname=font_path, size=12)
en_font_path = 'TIMES.TTF'
en_font_prop = fm.FontProperties(fname=en_font_path, size=12)
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 6))
ax1.plot(x, y1, label=u'正弦曲線', color='blue')
ax1.set_ylabel('正弦值', fontproperties=font_prop)
ax1.set_xlabel('橫軸', fontproperties=font_prop)
ax1.set_title('正弦函數(shù)', fontproperties=font_prop)
plt.subplots_adjust(hspace=0.6) # 調(diào)整子圖之間的距離
ax2.plot(x, y2, label=u'余弦曲線', color='red')
ax2.set_ylabel('余弦值', fontproperties=font_prop)
ax2.set_xlabel('橫軸', fontproperties=font_prop)
ax2.set_title('余弦函數(shù)', fontproperties=font_prop)
plt.suptitle('函數(shù)', fontproperties=font_prop)
ax1.tick_params(axis='both', which='major', labelsize=10, direction='in', bottom=True)
ax2.tick_params(axis='both', which='major', labelsize=10, direction='in')
# ax1.xaxis.set_tick_params(which='both', labelbottom=True)
# ax1.yaxis.set_tick_params(which='both', labelleft=True)
for tick in ax1.get_xticklabels():
tick.set_fontproperties(en_font_prop)
for tick in ax1.get_yticklabels():
tick.set_fontproperties(en_font_prop)
for tick in ax2.get_xticklabels():
tick.set_fontproperties(en_font_prop)
for tick in ax2.get_yticklabels():
tick.set_fontproperties(en_font_prop)
ax1.legend(loc='upper right', fontsize=12, edgecolor='black', fancybox=False, framealpha=1, prop=font_prop)
ax2.legend(loc='upper right', fontsize=12, edgecolor='black', fancybox=False, framealpha=1, prop=font_prop)
plt.show()
上述的代碼顯示結(jié)果是:
下面我們開始對代碼一段段分析。
一、多張子圖的參數(shù)設(shè)置
1. 子圖(subplots)
下面的代碼就是先進(jìn)行子圖設(shè)置。
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6))
第一個參數(shù)為2,表示子圖行的排布方式,為2行
第二個參數(shù)為1,表示子圖列的排布方式,為1列
figsize的參數(shù)為(10,6),表示最終圖的總像素數(shù)為1000*600。也就是說第一個值為寬,第二個值為高,分別乘以100后,即為生成最終圖的寬高。
除了上面描述的幾種參數(shù)以外,還有下面的可選參數(shù):
參數(shù) | 含義 |
---|---|
squeeze | 是否壓縮返回的子圖網(wǎng)格數(shù)組,如果為 True,則當(dāng) nrows=1 且 ncols=1 時,返回的是單個 Axes 實例,而不是一個包含單個 Axes 實例的數(shù)組。 |
subplot_kw | 傳遞給每個子圖的關(guān)鍵字參數(shù)字典。 |
gridspec_kw | 傳遞給 GridSpec 的關(guān)鍵字參數(shù)字典。 |
sharex | 是否共享 x 軸的限制范圍??蛇x值為 ‘none’、‘a(chǎn)ll’ 或 ‘row’。 |
sharey | 是否共享 y 軸的限制范圍。可選值為 ‘none’、‘a(chǎn)ll’ 或 ‘col’。 |
2. 子圖y軸坐標(biāo)說明(set_ylabel),子圖x軸坐標(biāo)說明(set_xlabel),設(shè)置子圖標(biāo)題(set_title)
與單一圖像不同的是,有子圖的情況下,我們對子圖設(shè)置坐標(biāo)名稱和子圖名稱時調(diào)用的名字前面要加上set_
。
ax1.plot(x, y1, label=u'正弦曲線', color='blue')
ax1.set_ylabel('正弦值', fontproperties=font_prop)
ax1.set_xlabel('橫軸', fontproperties=font_prop)
ax1.set_title('正弦函數(shù)', fontproperties=font_prop)
可以設(shè)置的參數(shù)在下面的對應(yīng)列表中,上面程序中的'正弦值'
,'橫軸'
就是下面的參數(shù)label。
參數(shù) | 含義 |
---|---|
label | 標(biāo)簽的文本內(nèi)容。 |
fontsize(size) | 標(biāo)簽的字體大小。 |
fontweight | 標(biāo)簽的字體粗細(xì),通常為 ‘bold’ 或 ‘normal’,是否有變化還要看字體文件本身是否支持 |
color | 標(biāo)簽的字體顏色,可以是顏色名稱、十六進(jìn)制碼或 RGB 元組。 |
rotation | 標(biāo)簽的旋轉(zhuǎn)角度,通常為 0(水平)或 90(垂直)。 |
va | 標(biāo)簽的垂直對齊方式,可選值包括 ‘top’、‘center’ 或 ‘bottom’。 |
ha | 標(biāo)簽的水平對齊方式,可選值包括 ‘center’、‘left’ 或 ‘right’ |
3. 圖片總標(biāo)題(suptitle)
設(shè)置圖的總名稱需要調(diào)用suptitle函數(shù)實現(xiàn)。suptitle是super title的縮寫,其實就是總標(biāo)題,下文參數(shù)表格中的超級標(biāo)題即總標(biāo)題。
plt.suptitle('函數(shù)', fontproperties=font_prop)
suptitle可以設(shè)置參數(shù)如下表所示,本例中‘函數(shù)’
就是參數(shù)中的t
。
參數(shù) | 含義 |
---|---|
t | 超級標(biāo)題的文本內(nèi)容。 |
x | 超級標(biāo)題的 x 坐標(biāo),通常為 0.5,即位于子圖網(wǎng)格的中央。這個值是一個百分比,左邊為0,右邊為1。0.5就是處于圖像正中間。 |
y | 超級標(biāo)題的 y 坐標(biāo),默認(rèn)值為 0.98,即位于子圖網(wǎng)格的頂部。這個值是一個百分比,頂部為1,底部為0。0.98就是這個圖像高度的98%的位置。 |
fontsize(size) | 超級標(biāo)題的字體大小。 |
fontweight | 超級標(biāo)題的字體粗細(xì),通常為 ‘bold’ 或 ‘normal’。 |
color | 超級標(biāo)題的字體顏色,可以是顏色名稱、十六進(jìn)制碼或 RGB 元組。 |
ha | 超級標(biāo)題的水平對齊方式,可選值包括 ‘center’、‘left’ 或 ‘right’。 |
va | 超級標(biāo)題的垂直對齊方式,可選值包括 ‘top’、‘center’ 或 ‘bottom’ |
4. 刻度參數(shù)設(shè)置(tick_parms)
ax1.tick_params(axis='both', which='major', labelsize=10, direction='in', bottom=True)
ax2.tick_params(axis='both', which='major', labelsize=10, direction='in')
常見的使用到的參數(shù)如下表所示
參數(shù) | 含義 |
---|---|
axis | 指定要設(shè)置哪個坐標(biāo)軸的刻度線和標(biāo)簽屬性,可選值為 ‘x’、‘y’ 或 ‘both’ |
which | 指定要設(shè)置哪些刻度線和標(biāo)簽屬性,可選值為 ‘major’(主刻度線和標(biāo)簽)、‘minor’(次刻度線和標(biāo)簽)或 ‘both’(主刻度線和標(biāo)簽以及次刻度線和標(biāo)簽) |
direction | 指定刻度線的方向,可選值為 ‘in’(向內(nèi))、‘out’(向外)或 ‘inout’(內(nèi)外均有) |
length | 指定刻度線的長度(單位為點) |
width | 指定刻度線的寬度(單位為點) |
color | 指定刻度線和標(biāo)簽的顏色 |
pad | 指定刻度標(biāo)簽與刻度線之間的間距(單位為點) |
labelsize | 指定刻度標(biāo)簽的字號大小(單位為點) |
labelcolor | 指定刻度標(biāo)簽的顏色 |
bottom、top、left、right | 分別指定四個邊框上的刻度線和標(biāo)簽屬性,這些值都是布爾屬性,默認(rèn)bottom和left是True,top和right是False |
把上面的tick_params中的參數(shù)修改下,添加下表中的一些參數(shù),如下面所示
ax1.tick_params(axis='both', which='major', labelsize=10, direction='in', width=5, pad=10, top=True, left=False, right=True, labelcolor='green')
顯示出的圖就變了,我是隨便加了些,內(nèi)容反而顯的雜亂了,其目的主要是為了測試。
5. 刻度標(biāo)簽的字體(get_xticklabels)(set_fontproperties)
關(guān)于刻度標(biāo)簽的很多參數(shù),在tick_params中其實就可以設(shè)置了,比如說color,pad,labelsize,labelcolor。但唯獨這個字體的格式的設(shè)置比較特殊,需要按下面的代碼進(jìn)行修改
for tick in ax1.get_xticklabels():
tick.set_fontproperties(en_font_prop)
for tick in ax1.get_yticklabels():
tick.set_fontproperties(en_font_prop)
for tick in ax2.get_xticklabels():
tick.set_fontproperties(en_font_prop)
for tick in ax2.get_yticklabels():
tick.set_fontproperties(en_font_prop)
上面的代碼實現(xiàn)的是對子圖1和子圖2的x軸刻度標(biāo)簽和y軸刻度標(biāo)簽的修改,總共要做四次,修改成新羅馬體。
get_xticklabels 是 Matplotlib 中用于獲取 x 軸刻度標(biāo)簽的方法。這個方法沒有參數(shù)可以設(shè)置,它返回的是一個包含 Text
對象的列表,每個 Text
對象代表一個 x 軸刻度標(biāo)簽,可以通過調(diào)用 Text
對象的方法不僅可以用來設(shè)置刻度標(biāo)簽的字體,還可以設(shè)置刻度標(biāo)簽的屬性,例如字體大小、顏色、旋轉(zhuǎn)角度等,等于是通過for循環(huán)遍歷來一個個設(shè)置刻度標(biāo)簽。
以下是一些常用的 Text 對象方法及其含義:文章來源:http://www.zghlxwxcb.cn/news/detail-741200.html
對象方法 | 含義 |
---|---|
set_text(text) | 設(shè)置刻度標(biāo)簽的文本內(nèi)容。 |
set_fontsize(size) | 設(shè)置刻度標(biāo)簽的字號大小。 |
set_color(color) | 設(shè)置刻度標(biāo)簽的顏色。 |
set_rotation(angle) | 設(shè)置刻度標(biāo)簽的旋轉(zhuǎn)角度(單位為度)。 |
set_ha(ha) | 設(shè)置刻度標(biāo)簽的水平對齊方式,可選值為 ‘left’、‘center’ 或 ‘right’。 |
set_va(va) | 設(shè)置刻度標(biāo)簽的垂直對齊方式,可選值為 ‘top’、‘center’ 或 ‘bottom’。 |
總結(jié)
本章節(jié)主要介紹了子圖繪圖中常見的幾個參數(shù)的設(shè)置,與單一圖所使用的函數(shù)是不同的,使用者需要注意。文章來源地址http://www.zghlxwxcb.cn/news/detail-741200.html
到了這里,關(guān)于Python常見庫matplotlib之多個子圖繪圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!