matplotlib 如何在子图中调整x限制而不收缩颜色条

eufgjt7s  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一组子图,每个子图都需要一个颜色条。如果我绘制每个子图而不设置x限制,x轴将延伸到我的数据域之外,并显示大量的白色空间。我使用以下代码:

import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
from numpy import ma
from mpl_toolkits.axes_grid1 import make_axes_locatable

def plot_threshold(ax):
    """ plot boundary condition (solid) and
        extrapolated condition(dotted)"""
    x = np.arange(0,10,.5)
    slide= Threshold(x)
    ax.plot(slide[0], slide[1], 'r-',
             linewidth=2)
    ex_slide = Extrapolated_threshold(x)
    ax.plot(ex_slide[0], ex_slide[1], 'r:')

def make_subplot(ax, x, y, zdata, title):
    ax.set_title(title, size =14)
    CS = ax.tricontourf(x, y, zdata, 100, cmap=clrmap)
    plot_threshold(ax)

     #TROUBLESOM LINE BELOW
    plt.xlim(0,xmax)

    # create divider for existing axes instance
    divider = make_axes_locatable(ax)
    # append axes to rhe right of ax, with 5% width of ax
    cax1 = divider.append_axes('right', size='4%', pad = 0.1)
    # create color bar in the appneded axes
    cbar = plt.colorbar(CS, cax=cax1)

clrmap = plt.cm.viridis

# Three subplots, stacked vertically
fig, axarr = plt.subplots(3, figsize =(8,10), sharex='col')
make_subplot(axarr[0], x, y, z1, "Plot 1")  
make_subplot(axarr[1], x, y, z2, 'Plot 2')     
make_subplot(axarr[2], x, y, z3, 'Plot 3')

字符串
如果我将plt.xlim()添加到make_subplot函数中,顶部两个子图的颜色条会变得非常窄,无法读取,第三个子图的颜色条不受影响。
make_subplot中删除plt.xlim()并将其添加到函数调用下面,如下所示:

make_subplot(axarr[0], x, y, z1, "Plot 1")
plt.xlim(0,14)
make_subplot(axarr[1], x, y, z2, 'Plot 2')
plt.xlim(0,14)     
make_subplot(axarr[2], x, y, z3, 'Plot 3')
plt.xlim(0,14)


不调整x限制并挤压颜色条。
1)为什么make_subplots中的线条对颜色条的影响不一样?
2)如何调整x限制,同时保持满意的颜色条?


的数据

az31mfrm

az31mfrm1#

而不是

make_subplot(axarr[0], x, y, z1, "Plot 1")
plt.xlim(0,14)
make_subplot(axarr[1], x, y, z2, 'Plot 2')
plt.xlim(0,14)     
make_subplot(axarr[2], x, y, z3, 'Plot 3')
plt.xlim(0,14)

字符串
尝试

make_subplot(axarr[0], x, y, z1, "Plot 1")
axarr[0].set_xlim(0,14)
make_subplot(axarr[1], x, y, z2, 'Plot 2')
axarr[1].set_xlim(0,14)     
make_subplot(axarr[2], x, y, z3, 'Plot 3')
axarr[2].set_xlim(0,14)


我假设plt.xlim作用在colorbar轴上,因为它是调用时的当前轴。在显示数据的轴上调用plt.xlim(即axarr[i])应该可以解决这个问题。

相关问题