matplotlib多子圖實現(xiàn)共享坐標軸的示例詳解
共用坐標
當一個圖像中有多個子圖時,若這些子圖坐標的含義相同,那么省略一些坐標可以讓圖像更加簡潔。在matplotlib中,通過sharex或者sharey可以起到共享x或y軸坐標的作用。示例如下
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()
效果如下,左上角的子圖沒有x刻度值,右下角則沒有y刻度值,右上角則什么坐標軸也沒有。
添加共享軸
直接通過subplots來創(chuàng)建圖窗和坐標軸,盡管用一行代碼解決了很多問題,但相應地也不夠靈活,而靈活添加坐標軸的函數(shù)add_subplot也有sharex和sharey的參數(shù),但二者并不是布爾型參數(shù),而是需要輸入希望共享的坐標軸。
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()
效果如下,一方面,從各坐標軸的坐標來看,的確實現(xiàn)了坐標共享,但并沒有像subplots中一樣,直接隱藏不必要的坐標刻度。
為了達到和subplots相同的效果,需要手動隱藏坐標刻度,如將代碼改為下面的形式,即可實現(xiàn)目標
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()
灰度直方圖
上面示例中那幾個子圖,彼此之間區(qū)別不大,放在一張圖中是完全沒問題的,但有些情況則不適合放在一張圖中,比如對于一張圖片來說,想知道其水平方向上灰度強度的分布,就比較適合坐標。
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) # 散點圖繪制 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個通道,所以在對每行或者每列像素求和時,選擇分別對三個通道進行操作。而后在繪制曲線時,對三個通道的值也使用了不同的顏色方案。通過tick_params函數(shù),取消了上圖底部和右圖左側的坐標刻度。
最后得圖如下
到此這篇關于matplotlib多子圖實現(xiàn)共享坐標軸的示例詳解的文章就介紹到這了,更多相關matplotlib共享坐標軸內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pyinstaller將python程序打包為可執(zhí)行文件
這篇文章主要介紹了pyinstaller將python程序打包為可執(zhí)行文件,pyinstaller是一個python打包工具,它將python程序及所需依賴都打包成一個可執(zhí)行文件2022-08-08python通過TimedRotatingFileHandler按時間切割日志
這篇文章主要介紹了python通過TimedRotatingFileHandler按時間切割日志的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07python+matplotlib繪制簡單的海豚(頂點和節(jié)點的操作)
這篇文章主要介紹了python+matplotlib繪制簡單的海豚(頂點和節(jié)點的操作),具有一定借鑒價值,需要的朋友可以參考下2018-01-01Python使用JDAudioCrawler將下載的音頻存儲到本地
在當今數(shù)字化時代,音頻數(shù)據(jù)的獲取和處理變得越來越重要,本文將訪問網(wǎng)易云音樂為案例,介紹如何使用JDAudioCrawler這個強大的工具,將音頻數(shù)據(jù)存儲下載到本地存儲中,需要的可以了解下2023-10-10Python使用自帶的base64庫進行base64編碼和解碼的實現(xiàn)
本文主要介紹了Python使用自帶的base64庫進行base64編碼和解碼的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03