matplotlib多子圖實(shí)現(xiàn)共享坐標(biāo)軸的示例詳解
共用坐標(biāo)
當(dāng)一個(gè)圖像中有多個(gè)子圖時(shí),若這些子圖坐標(biāo)的含義相同,那么省略一些坐標(biāo)可以讓圖像更加簡(jiǎn)潔。在matplotlib中,通過(guò)sharex或者sharey可以起到共享x或y軸坐標(biāo)的作用。示例如下
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-5,5,100) ys = [np.sin(x+i) for i in range(5)] fig,axes = plt.subplots(2,2,sharex=True, sharey=True) axes = axes.reshape(-1) for i in range(4): axes[i].plot(x, ys[i]) plt.show()
效果如下,左上角的子圖沒(méi)有x刻度值,右下角則沒(méi)有y刻度值,右上角則什么坐標(biāo)軸也沒(méi)有。
添加共享軸
直接通過(guò)subplots來(lái)創(chuàng)建圖窗和坐標(biāo)軸,盡管用一行代碼解決了很多問(wèn)題,但相應(yīng)地也不夠靈活,而靈活添加坐標(biāo)軸的函數(shù)add_subplot也有sharex和sharey的參數(shù),但二者并不是布爾型參數(shù),而是需要輸入希望共享的坐標(biāo)軸。
fig = plt.figure() ax3 = fig.add_subplot(223) ax3.plot(x,ys[2]) ax1 = fig.add_subplot(221, sharex=ax3) ax1.plot(x[:50],ys[0][:50]) ax4 = fig.add_subplot(224, sharey=ax3) ax4.plot(x[50:],ys[3][50:]) ax2 = fig.add_subplot(222, sharex=ax4, sharey=ax1) ax2.plot(x,ys[1]) plt.show()
效果如下,一方面,從各坐標(biāo)軸的坐標(biāo)來(lái)看,的確實(shí)現(xiàn)了坐標(biāo)共享,但并沒(méi)有像subplots中一樣,直接隱藏不必要的坐標(biāo)刻度。
為了達(dá)到和subplots相同的效果,需要手動(dòng)隱藏坐標(biāo)刻度,如將代碼改為下面的形式,即可實(shí)現(xiàn)目標(biāo)
fig = plt.figure() ax3 = fig.add_subplot(223) ax3.plot(x,ys[2]) ax1 = fig.add_subplot(221, sharex=ax3) ax1.plot(x[:50],ys[0][:50]) ax1.tick_params(axis="x", labelbottom=False) ax4 = fig.add_subplot(224, sharey=ax3) ax4.plot(x[50:],ys[3][50:]) ax4.tick_params(axis="y", labelleft=False) ax2 = fig.add_subplot(222, sharex=ax4, sharey=ax1) ax2.plot(x,ys[1]) ax2.tick_params(axis="x", labelbottom=False) ax2.tick_params(axis="y", labelleft=False) plt.show()
灰度直方圖
上面示例中那幾個(gè)子圖,彼此之間區(qū)別不大,放在一張圖中是完全沒(méi)問(wèn)題的,但有些情況則不適合放在一張圖中,比如對(duì)于一張圖片來(lái)說(shuō),想知道其水平方向上灰度強(qiáng)度的分布,就比較適合坐標(biāo)。
path = r'lena.jpg' img = plt.imread(path) xs = [np.sum(img[:,:,i],0) for i in range(3)] ys = [np.sum(img[:,:,i],1) for i in range(3)] fig = plt.figure() gs = fig.add_gridspec(2, 2, width_ratios=(4, 1), height_ratios=(1, 4)) ax = fig.add_subplot(gs[1, 0]) ax.imshow(img) # 散點(diǎn)圖繪制 plt.axis('off') xHist = fig.add_subplot(gs[0, 0], sharex=ax) xHist.tick_params(axis="x", labelbottom=False) yHist = fig.add_subplot(gs[1, 1], sharey=ax) yHist.tick_params(axis="y", labelleft=False) colors = 'rgb' for i in range(3): xHist.plot(xs[i], color=colors[i]) yHist.plot(ys[i], np.arange(len(ys[i])),color=colors[i]) plt.show()
由于lena圖有3個(gè)通道,所以在對(duì)每行或者每列像素求和時(shí),選擇分別對(duì)三個(gè)通道進(jìn)行操作。而后在繪制曲線(xiàn)時(shí),對(duì)三個(gè)通道的值也使用了不同的顏色方案。通過(guò)tick_params函數(shù),取消了上圖底部和右圖左側(cè)的坐標(biāo)刻度。
最后得圖如下
到此這篇關(guān)于matplotlib多子圖實(shí)現(xiàn)共享坐標(biāo)軸的示例詳解的文章就介紹到這了,更多相關(guān)matplotlib共享坐標(biāo)軸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pyinstaller將python程序打包為可執(zhí)行文件
這篇文章主要介紹了pyinstaller將python程序打包為可執(zhí)行文件,pyinstaller是一個(gè)python打包工具,它將python程序及所需依賴(lài)都打包成一個(gè)可執(zhí)行文件2022-08-08python通過(guò)TimedRotatingFileHandler按時(shí)間切割日志
這篇文章主要介紹了python通過(guò)TimedRotatingFileHandler按時(shí)間切割日志的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07python+matplotlib繪制簡(jiǎn)單的海豚(頂點(diǎn)和節(jié)點(diǎn)的操作)
這篇文章主要介紹了python+matplotlib繪制簡(jiǎn)單的海豚(頂點(diǎn)和節(jié)點(diǎn)的操作),具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python使用JDAudioCrawler將下載的音頻存儲(chǔ)到本地
在當(dāng)今數(shù)字化時(shí)代,音頻數(shù)據(jù)的獲取和處理變得越來(lái)越重要,本文將訪(fǎng)問(wèn)網(wǎng)易云音樂(lè)為案例,介紹如何使用JDAudioCrawler這個(gè)強(qiáng)大的工具,將音頻數(shù)據(jù)存儲(chǔ)下載到本地存儲(chǔ)中,需要的可以了解下2023-10-10Python使用自帶的base64庫(kù)進(jìn)行base64編碼和解碼的實(shí)現(xiàn)
本文主要介紹了Python使用自帶的base64庫(kù)進(jìn)行base64編碼和解碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Python中re模塊:匹配開(kāi)頭/結(jié)尾(^/$)
本文主要介紹了Python中re模塊:匹配開(kāi)頭/結(jié)尾(^/$),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08python實(shí)現(xiàn)三階魔方還原的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)三階魔方還原的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04