来自 gdal-rasters 的多个 matplotlib-axes

multitple matplotlib-axes from gdal-rasters

我有点难以使用 matplotlib 在一个图中绘制多个光栅。 我有一个包含 6 条光栅路径的列表,我会用 3x2 子图制作一个图形。我不太确定哪种 matplotlib 方法最适合这个。此外,我还有一个问题,我不知道如何为所有地块制作一个 colorbar/legend 。

我现在有点乱的代码看起来像这样,但感觉不是很好...

fig, axs = plt.subplots(3, 2, figsize=(18, 10))
i = 0
j = 0

fig.suptitle("Multiple Images")

for c, img in enumerate(imgs):
    name = img.split(os.sep)[1]
    gdalobj = gdal.Open(img, gdal.GA_ReadOnly)
    img_array = gdalobj.GetRasterBand(2).ReadAsArray()
    if c < 2:
        axs[0,c].imshow(img_array, cmap="gray")
        axs[0,c].set_title(name)
    elif 2 <= c < 4:
        axs[1,i].imshow(img_array, cmap="gray")
        axs[1,i].set_title(name)
        i+=1
    else:
        axs[2,j].imshow(img_array, cmap="gray")
        axs[2,j].set_title(name)
        j+=1

我真的不认为这是最好的方法,但它确实有效。但是,我想生成一个单一的颜色条,但我不知道该怎么做...

您可以通过遍历扁平化的轴对象数组,将凌乱的代码简化为以下内容。至于彩条,可以参考已有的帖子,比如this one

for ax, img in zip(axs.flatten(), imgs):
    name = img.split(os.sep)[1]
    gdalobj = gdal.Open(img, gdal.GA_ReadOnly)
    img_array = gdalobj.GetRasterBand(2).ReadAsArray()
    ax.imshow(img_array, cmap="gray")
    ax.set_title(name)