Skip to main content
 首页 » 编程设计

python之如何使用 matplotlib divider 将子图拆分为两个以上的部分

2025年05月04日23sharpest

我使用 gridspec 生成了包含 4 个子图(地球、印度、太平洋和大西洋)的图像:

    from matplotlib import gridspec 
 
    fig = plt.figure() 
    gs = gridspec.GridSpec(2, 2) 

然后每个子图都使用分隔线,这样我就可以对浅海和深海使用不同的垂直比例:

    from mpl_toolkits.axes_grid1 import make_axes_locatable 
 
    axMain = plt.subplot(gs[0]) 
    plt.sca(axMain) 
    cf = axMain.contourf(...) 
 
    divider = make_axes_locatable(axMain) 
    axShallow = divider.append_axes("top", size="100%", pad=0.1, sharex=axMain) 
    axShallow.contourf(...) 

我想在每个子图的顶部添加一个额外的折线图(即在其他两个图之上的第三个图),显示图的整个 2000 米深度上每个纬度的综合值(即第三个图将共享其下方其他两个的 x 轴)。

我不知道如何第三次划分每个子​​图,所以我希望有人能建议我如何做?

请您参考如下方法:

使用 make_axes_locatable 多次划分轴是完全可能的。您只需要第二次(或第三次等)调用 divider.append_axes(..)。
这是一个例子。

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import gridspec 
from mpl_toolkits.axes_grid1 import make_axes_locatable 
 
fig = plt.figure() 
gs = gridspec.GridSpec(2, 2) 
 
X, Y = np.meshgrid(np.linspace(0,100, num=101), np.linspace(0,100, num=101)) 
f = lambda x, y: np.sin(x/10.)+y/100. 
 
 
axMain = plt.subplot(gs[0]) 
plt.sca(axMain) 
cf = axMain.contourf(X[0:40,:], Y[0:40,:], f(X,Y)[0:40,:] , vmin=-1, vmax=2) 
 
divider = make_axes_locatable(axMain) 
axShallow = divider.append_axes("top", size="100%", pad=0.1, sharex=axMain) 
axShallow.contourf(X[41:80,:], Y[41:80,:], f(X,Y)[41:80,:], vmin=-1, vmax=2) 
axShallow.set_xticklabels([]) 
axShallow2 = divider.append_axes("top", size="50%", pad=0.1, sharex=axMain) 
axShallow2.contourf(X[81:,:], Y[81:,:], f(X,Y)[81:,:], vmin=-1, vmax=2) 
axShallow2.set_xticklabels([]) 
 
plt.show()