如何使用matplotlib分隔符将子图分割成两个以上的部分?

时间:2016-11-09 05:44:58

标签: python matplotlib

我使用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(...)

enter image description here

我想在每个子图的顶部添加一个额外的折线图(即在另外两个图的顶部的第三个图),显示在整个2000m深度图上每个纬度的积分值(即第三个图)会分享它下面另外两个的x轴。)

我无法弄清楚如何第三次划分每个子​​图,所以我希望有人可以建议我怎么做?

1 个答案:

答案 0 :(得分:4)

完全可以使用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()