matplotlib 向任意位置添加一個子圖(axes)

當前有效matplotlib版本為:3.4.1

概述

axes()函數功能與subplot()函數極其相似。都是向當前圖像(figure)添加一個子圖(Axes),並將該子圖設為當前子圖或者將某子圖設為當前子圖。兩者的區別在於subplot()函數通過參數確定在子圖網格中的位置,而axes()函數在添加子圖位置時根據4個坐標確定位置。

函數的定義簽名為:matplotlib.pyplot.axes(arg=None, **kwargs)

函數的調用簽名為:

# 在當前圖像中添加一個鋪滿的子圖
plt.axes()
# 根據rect位置添加一個子圖
plt.axes(rect, projection=None, polar=False, **kwargs)
# 將ax設置為當前子圖
plt.axes(ax)

函數的參數為:

  • arg : 取值為 None或四元組rect
    • None:使用subplot(**kwargs)添加一個新的鋪滿窗口的子圖。
    • 四元組rectrect = [left, bottom, width, height],使用 ~.Figure.add_axes根據rect添加一個新的子圖。
  • rect的取值為以左下角為繪制基準點,確定高度和寬度。rect的4個元素均應在[0,1]之間(即以圖像比例為單位)。
  • projection: 控制子圖的投影方式。{None, 'aitoff', 'hammer', 'lambert', 'mollweide', 'polar', 'rectilinear', str},默認值為None ,即'rectilinear'
  • polar:相當於設置projection='polar'。可選參數。佈爾值,默認值為True
  • sharex, sharey:用於設置共享x/y軸。可選參數。Axes對象。默認值為None
  • lables:返回的子圖對象的標簽。可選參數。字符串。
  • **kwargs:用於向創建子圖網格時用到的 ~matplotlib.gridspec.GridSpec類的構造函數傳遞關鍵字參數。可選參數。字典。

函數的返回值為:
.axes.SubplotBase實例,或其他~.axes.Axes的子類實例。

函數原理

axes函數其實是Figure.add_subplotFigure.add_axes方法的封裝。源碼為:

def axes(arg=None, **kwargs):
    fig = gcf()
    if arg is None:
        return fig.add_subplot(**kwargs)
    else:
        return fig.add_axes(arg, **kwargs)

案例:使用axes函數添加子圖

根據輸出可知,axes添加的子圖是可以重疊的

在這裡插入圖片描述

案例:混合應用subplot、subplots、subplot2grid、axes函數

在這裡插入圖片描述

import matplotlib.pyplot as plt

# 添加3行3列子圖9個子圖
fig, axes = plt.subplots(3, 3)
# 為第1個子圖繪制圖形
axes[0, 0].bar(range(1, 4), range(1, 4))
# 使用subplot函數為第5個子圖繪制圖形
plt.subplot(335)
plt.plot(1,'o')
# 使用subplot2grid函數將第三行子圖合並為1個
plt.subplot2grid((3,3),(2,0),colspan=3)
# 在圖像0.5,0.5位置添加一個0.1寬0.1長的背景色為黑色的子圖
plt.axes((0.5,0.5,0.1,0.1),facecolor='k')
plt.show()

axes函數與subplotsubplotssubplot2grid函數的對比

相同之處:
axes函數與subplotsubplot2grid函數都是添加一個子圖。

不同之處:
axes函數可在圖像中的任意位置添加子圖。subplotsubplotssubplot2grid函數隻能根據固定的子圖網格位置添加子圖。
axes函數創建的子圖可重疊。subplotsubplotssubplot2grid函數創建的子圖如果位置重疊,會覆蓋掉原有的子圖(刪除原有子圖)。

到此這篇關於matplotlib 向任意位置添加一個子圖(axes)的文章就介紹到這瞭,更多相關matplotlib任意位置添加子圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!