Python常見庫(kù)matplotlib學(xué)習(xí)筆記之多個(gè)子圖繪圖
系列文章目錄
- 第一章 Python常見庫(kù)matplotlib之畫圖文字的中文顯示
- 第二章 Python常見庫(kù)matplotlib之畫圖中各個(gè)模塊的含義及修改方式
- 第三章 Python常見庫(kù)matplotlib之多個(gè)子圖繪圖
前言
前兩章介紹了單張圖的繪圖操作,這一章介紹下在一張圖中畫多個(gè)圖的操作。我們把前一篇的程序稍微改動(dòng)一下,上一篇中是將正弦函數(shù)和余弦函數(shù)畫在一張圖中,這一次我們將兩個(gè)曲線分別畫在不同的子圖中。
完整程序如下所示:
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é)果是:
下面我們開始對(duì)代碼一段段分析。
一、多張子圖的參數(shù)設(shè)置
1. 子圖(subplots)
下面的代碼就是先進(jìn)行子圖設(shè)置。
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6))
第一個(gè)參數(shù)為2,表示子圖行的排布方式,為2行
第二個(gè)參數(shù)為1,表示子圖列的排布方式,為1列
figsize的參數(shù)為(10,6),表示最終圖的總像素?cái)?shù)為1000*600。也就是說(shuō)第一個(gè)值為寬,第二個(gè)值為高,分別乘以100后,即為生成最終圖的寬高。
除了上面描述的幾種參數(shù)以外,還有下面的可選參數(shù):
參數(shù) | 含義 |
---|---|
squeeze | 是否壓縮返回的子圖網(wǎng)格數(shù)組,如果為 True,則當(dāng) nrows=1 且 ncols=1 時(shí),返回的是單個(gè) Axes 實(shí)例,而不是一個(gè)包含單個(gè) Axes 實(shí)例的數(shù)組。 |
subplot_kw | 傳遞給每個(gè)子圖的關(guān)鍵字參數(shù)字典。 |
gridspec_kw | 傳遞給 GridSpec 的關(guān)鍵字參數(shù)字典。 |
sharex | 是否共享 x 軸的限制范圍。可選值為 ‘none’、‘all’ 或 ‘row’。 |
sharey | 是否共享 y 軸的限制范圍??蛇x值為 ‘none’、‘all’ 或 ‘col’。 |
2. 子圖y軸坐標(biāo)說(shuō)明(set_ylabel),子圖x軸坐標(biāo)說(shuō)明(set_xlabel),設(shè)置子圖標(biāo)題(set_title)
與單一圖像不同的是,有子圖的情況下,我們對(duì)子圖設(shè)置坐標(biāo)名稱和子圖名稱時(shí)調(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ù)在下面的對(duì)應(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)簽的垂直對(duì)齊方式,可選值包括 ‘top’、‘center’ 或 ‘bottom’。 |
ha | 標(biāo)簽的水平對(duì)齊方式,可選值包括 ‘center’、‘left’ 或 ‘right’ |
3. 圖片總標(biāo)題(suptitle)
設(shè)置圖的總名稱需要調(diào)用suptitle函數(shù)實(shí)現(xiàn)。suptitle是super title的縮寫,其實(shí)就是總標(biāo)題
plt.suptitle('函數(shù)', fontproperties=font_prop)
suptitle可以設(shè)置參數(shù)如下表所示,本例中‘函數(shù)’就是參數(shù)中的t。
參數(shù) | 含義 |
---|---|
t | 超級(jí)標(biāo)題的文本內(nèi)容。 |
x | 超級(jí)標(biāo)題的 x 坐標(biāo),通常為 0.5,即位于子圖網(wǎng)格的中央。這個(gè)值是一個(gè)百分比,左邊為0,右邊為1。0.5就是處于圖像正中間。 |
y | 超級(jí)標(biāo)題的 y 坐標(biāo),默認(rèn)值為 0.98,即位于子圖網(wǎng)格的頂部。這個(gè)值是一個(gè)百分比,頂部為1,底部為0。0.98就是這個(gè)圖像高度的98%的位置。 |
fontsize(size) | 超級(jí)標(biāo)題的字體大小。 |
fontweight | 超級(jí)標(biāo)題的字體粗細(xì),通常為 ‘bold’ 或 ‘normal’。 |
color | 超級(jí)標(biāo)題的字體顏色,可以是顏色名稱、十六進(jìn)制碼或 RGB 元組。 |
ha | 超級(jí)標(biāo)題的水平對(duì)齊方式,可選值包括 ‘center’、‘left’ 或 ‘right’。 |
va | 超級(jí)標(biāo)題的垂直對(duì)齊方式,可選值包括 ‘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è)置哪個(gè)坐標(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 | 指定刻度線的長(zhǎng)度(單位為點(diǎn)) |
width | 指定刻度線的寬度(單位為點(diǎn)) |
color | 指定刻度線和標(biāo)簽的顏色 |
pad | 指定刻度標(biāo)簽與刻度線之間的間距(單位為點(diǎn)) |
labelsize | 指定刻度標(biāo)簽的字號(hào)大小(單位為點(diǎn)) |
labelcolor | 指定刻度標(biāo)簽的顏色 |
bottom、top、left、right | 分別指定四個(gè)邊框上的刻度線和標(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)容反而顯的雜亂了,其目的主要是為了測(cè)試。
5. 刻度標(biāo)簽的字體(get_xticklabels)(set_fontproperties)
關(guān)于刻度標(biāo)簽的很多參數(shù),在tick_params中其實(shí)就可以設(shè)置了,比如說(shuō)color,pad,labelsize,labelcolor。但唯獨(dú)這個(gè)字體的格式的設(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)
上面的代碼實(shí)現(xiàn)的是對(duì)子圖1和子圖2的x軸刻度標(biāo)簽和y軸刻度標(biāo)簽的修改,總共要做四次,修改成新羅馬體。
get_xticklabels 是 Matplotlib 中用于獲取 x 軸刻度標(biāo)簽的方法。這個(gè)方法沒有參數(shù)可以設(shè)置,它返回的是一個(gè)包含 Text
對(duì)象的列表,每個(gè) Text
對(duì)象代表一個(gè) x 軸刻度標(biāo)簽,可以通過(guò)調(diào)用 Text
對(duì)象的方法不僅可以用來(lái)設(shè)置刻度標(biāo)簽的字體,還可以設(shè)置刻度標(biāo)簽的屬性,例如字體大小、顏色、旋轉(zhuǎn)角度等,等于是通過(guò)for循環(huán)遍歷來(lái)一個(gè)個(gè)設(shè)置刻度標(biāo)簽。
以下是一些常用的 Text 對(duì)象方法及其含義:
對(duì)象方法 | 含義 |
---|---|
set_text(text) | 設(shè)置刻度標(biāo)簽的文本內(nèi)容。 |
set_fontsize(size) | 設(shè)置刻度標(biāo)簽的字號(hào)大小。 |
set_color(color) | 設(shè)置刻度標(biāo)簽的顏色。 |
set_rotation(angle) | 設(shè)置刻度標(biāo)簽的旋轉(zhuǎn)角度(單位為度)。 |
set_ha(ha) | 設(shè)置刻度標(biāo)簽的水平對(duì)齊方式,可選值為 ‘left’、‘center’ 或 ‘right’。 |
set_va(va) | 設(shè)置刻度標(biāo)簽的垂直對(duì)齊方式,可選值為 ‘top’、‘center’ 或 ‘bottom’。 |
總結(jié)
本章節(jié)主要介紹了子圖繪圖中常見的幾個(gè)參數(shù)的設(shè)置,與單一圖所使用的函數(shù)是不同的,使用者需要注意。
到此這篇關(guān)于Python常見庫(kù)matplotlib學(xué)習(xí)筆記之多個(gè)子圖繪圖的文章就介紹到這了,更多相關(guān)matplotlib多個(gè)子圖繪圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
多個(gè)geojson經(jīng)過(guò)坐標(biāo)系轉(zhuǎn)換后如何合并為一個(gè)shp數(shù)據(jù)
這篇文章主要介紹了多個(gè)geojson經(jīng)過(guò)坐標(biāo)系轉(zhuǎn)換后如何合并為一個(gè)shp數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10python入門課程第一講之安裝與優(yōu)缺點(diǎn)介紹
這篇文章主要介紹了python入門課程第一講之安裝與優(yōu)缺點(diǎn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Python實(shí)現(xiàn)獲取nginx服務(wù)器ip及流量統(tǒng)計(jì)信息功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)獲取nginx服務(wù)器ip及流量統(tǒng)計(jì)信息功能,涉及Python針對(duì)nginx服務(wù)器信息操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05關(guān)于ZeroMQ 三種模式python3實(shí)現(xiàn)方式
今天小編就為大家分享一篇關(guān)于ZeroMQ 三種模式python3實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12