日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python繪制子圖技巧之plt.subplot、plt.subplots及坐標軸修改_python

作者:gailj ? 更新時間: 2022-07-06 編程語言

前言

偶然發現python(matplotlib)中繪制子圖有兩種方法,一種是plt.subplot,另一種是plt.subplots,這篇博客說一下這兩種方法的區別,用法,以及常用的一些函數。

plt.figure的作用是定義一個大的圖紙,可以設置圖紙的大小、分辨率等,例如

fig = plt.figure(figsize=(16,16),dpi=300)  # 初始化一張畫布

plt.plot() 是直接在當前活躍的的axes上面作圖,注意是當前活躍的

知道這兩點基礎知識后,再來看subplot和subplots

plt.subplot

fig = plt.figure(figsize=(12, 4), dpi=200)
for i in range(len(img)):
    plt.subplot(1, len(img),i+1)
    plt.imshow(img[i])
plt.show()

plt.subplot作用是指定子圖的位置,比如說現在總共有1行10列,當前子圖位于哪里;

使用這個函數時需要先定義一個大的圖紙,因為subplot函數無法更改圖紙的大小和分辨率等信息;所以必須通過fig = plt.figure(figsize=(12, 4), dpi=200)來定義圖紙相關設置;

同時,后續對于這個函數便捷的操作就是直接用plt,獲取當前活躍的圖層

plt.subplots

fig, ax = plt.subplots(1, len(img), figsize=(15, 10))
for i in range(len(img)):
    ax[i].imshow(img[i])
plt.show()

使用plt.subplots函數時,可以直接在該函數內部設置子圖紙信息

該函數返回兩個變量,一個是Figure實例fig,另一個 AxesSubplot實例ax 。fig代表整個圖像,ax代表坐標軸和畫的子圖,通過下標獲取需要的子區域。

后續我們需要對子圖操作時,直接ax[i].imshow(img[i])就行

與subplot的區別在于:(1)不需要通過plt來操作圖層,每一個圖層都有指定的axes;(2)一個寫在for循環外面,一個寫在里面;歸根于原因還是suplots繪制多少圖已經指定了,所以ax提前已經準備好了,而subplot函數調用一次就繪制一次,沒有指定

subplot和subplots都可以實現畫子圖功能,只不過subplots幫我們把畫板規劃好了,返回一個坐標數組對象,而subplot每次只能返回一個坐標對象,subplots還可以直接指定畫板的大小。

坐標軸修改

我們通常需要修改坐標軸大小、刻度等信息,不論是子圖還是一張大圖;下面來看一下subplots和subplot在修改坐標方面的差異

plt在修改坐標時直接寫plt.xlabel();plt.ylabel();plt.xlim();plt.ylim()等等就行,但是axes和plt不一樣,axes需要加上set,例如:axes.set_xlabel();axes.set_xlim() 這一點需要格外注意

對于修改子圖的坐標軸信息,很明顯是subplots更方便,因為他有獨立的axes,更方便讓每一個子圖的坐標軸不同,例如

fig, ax = plt.subplots(1, len(img), figsize=(15, 10))
for i in range(len(img)):
    ax[i].imshow(img[i])
    ax[i].set_xlabel("test csdn")
#如果要單獨修改坐標軸
ax[5].set_xlabel("test csdn")
plt.show()

如果是subplot修改的話,參考代碼如下:

fig = plt.figure(figsize=(12, 4), dpi=200)
for i in range(len(img)):
    plt.subplot(1, len(img),i+1)
    plt.imshow(img[i])
    plt.xlabel("csdn test")
plt.show()

當然,subplot也可以有返回值,但是這個返回值是一個一個的,并不是和subplots一樣是一群都給你

fig = plt.figure(figsize=(12, 4), dpi=200)
for i in range(len(img)):
    ax=plt.subplot(1, len(img),i+1)
    #或者這樣
    # ax = plt.gca()  獲取當前活躍的子圖層
    plt.imshow(img[i])
    ax.set_xlabel("csdn test")  #其實這樣還是沒法單個子圖修改
plt.show()

xlabel、ylabel: 設置橫軸、縱軸標簽及大小

?例如plt.xlabel("csdn test", fontsize=20)

xlim、ylim: 設置x、y坐標軸的起始點(從哪到哪)

?例如plt.xlim(0,50) plt.ylim(0,60)

xticks、yticks: 設置坐標軸刻度的字體大小

?例如plt.xticks(labelsize=20)

title: 設置圖片的標題

?例如 plt.title(“csdn test”)

總結

原文鏈接:https://blog.csdn.net/gailj/article/details/122149994

欄目分類
最近更新