共享一个colorbar?(语言-python)

我在用plt.imshow()函数画云图的时候出现这样一个问题:我将8个云图放在一起,想共享一个colorbar,并且想让colorbar在整个图的又方,但是我现在的代码可以显示一个colorbar,但是呢这个colorbar只显示在最后一个imshow图的右方。
代码如下:

matrices = np.random.random((2, 4, 10, 10))
for k in range(1, matrices.shape[0] * matrices.shape[1] + 1):
    plt.subplot(matrices.shape[0], matrices.shape[1], k)
    for i in range(matrices.shape[0]):
        for j in range(matrices.shape[1]):
            matrix = matrices[i, j, :, :]
            plt.imshow(matrix, cmap="Reds")
plt.colorbar()
plt.show()

运行结果为:

img


在不使用plt.subplots函数的前提下,该如何设置colorbar?谢谢!

  您把plt.colorbar()语句,后退一个缩进单位试试,我想ply.cilorbar()应该在第一层for之内的吧。

  您的plt.colorbar()在循环之外,仅执行了一次,当然就只有一个colorbar啰。😋


  • 以下回答由chatgpt基于相关博客总结生成:

    由于不使用plt.subplots()函数,可以尝试使用plt.colorbar()函数的参数来设置colorbar的位置和大小,并通过指定axes参数来将colorbar与子图关联起来。下面是解决方案:

    import matplotlib.pyplot as plt
    
    # 绘制8个云图
    fig, axs = plt.subplots(2, 4, figsize=(10, 5))
    for i, ax in enumerate(axs.flat):
        im = ax.imshow(data[i], cmap='jet')
        plt.colorbar(im, ax=ax, pad=0.02, fraction=0.1)
    
    # 设置共享的colorbar
    fig.subplots_adjust(right=0.85)
    cbar_ax = fig.add_axes([0.9, 0.15, 0.02, 0.7])
    plt.colorbar(im, cax=cbar_ax)
    
    plt.show()
    

    这段代码会创建一个2x4的子图,将每个云图绘制在对应的子图上,并通过指定pad和fraction参数来设置colorbar的位置和大小。然后,通过调整right参数来确保子图和colorbar的位置不会重叠。最后,使用fig.add_axes()函数创建一个新的axes对象来绘制共享的colorbar,并通过指定cax参数将其与最后一个子图关联起来。

    希望以上解决方案能够帮助到你!如果还有其他问题,请随时提问。