用于多个子地块的Python颜色条

用于多个子地块的Python颜色条,python,plot,subplot,colorbar,Python,Plot,Subplot,Colorbar,假设我们想用plt.imshow绘制3 x 5彩色打印图像的多点图。第一行包含某种数据,第二行和第三行包含某种其他类型的数据。问题是:是否有一种方法可以将第一行绘制在公共色条上,将第二行+第三行绘制在不同的色条上,并且两组的色标相同 到目前为止,我处理此类问题的方法是将第一个色条附加到单个色条上,例如第一行的最后一个绘图,将第二个色条附加到第二行和第三行的最后一个绘图上。然后,我将设置一个colorscale,合理地显示数据,并再次运行代码,通过vmin、vmax给出plt.imshow调用中已

假设我们想用plt.imshow绘制3 x 5彩色打印图像的多点图。第一行包含某种数据,第二行和第三行包含某种其他类型的数据。问题是:是否有一种方法可以将第一行绘制在公共色条上,将第二行+第三行绘制在不同的色条上,并且两组的色标相同

到目前为止,我处理此类问题的方法是将第一个色条附加到单个色条上,例如第一行的最后一个绘图,将第二个色条附加到第二行和第三行的最后一个绘图上。然后,我将设置一个colorscale,合理地显示数据,并再次运行代码,通过vmin、vmax给出plt.imshow调用中已经存在的两个组内的颜色限制

然而,这种方式失去了可交互性。因此,我想知道是否有一种python方法将两个颜色条连接到整个第一行和第二行+第三行,这样就有了某种句柄,可以编辑颜色限制,例如,通过set_clim,使该组中的所有图像同时设置为这些限制

考虑下面的示例代码。一种方法可能是某种类型的图像句柄列表。在这样的列表中,每次迭代都会附加下一个句柄,然后在创建绘图后,可以使用im1[i].set\clim在该列表上循环

然而,我感兴趣的是知道是否有一些指定类型的图像句柄组/容器已经有了相关的属性方法,不需要循环,或者是否有更聪明的方法

在上面的示例代码中,颜色条尚未绘制,但在循环后的plt.colorbar中仍然可以绘制,因为这样我们就有了它应该放置的轴,并且假设它存在于提到的图像“容器”中

出于演示目的,您还可以使用带有随机矩阵的3x3子图

谢谢你的帮助

注意:我如何增加色条的垂直尺寸,以适应整个第二行和第三行,而不是仅第三行?是否存在使轴可定位的可能性

PUSH:问题也可以这样表述:是否有一个matplotlib可映射,类似于im,但包含多个可传递给plt.colorbar的matplotlib,并且该matplotlib具有set_clim属性,以便更新所有图像的颜色比例以及颜色栏到新颜色限制的比例

im1 = []
im2 = []
for i in range(3):
  for j in range(nbins):
    pos = i*nbins + j + 1
    if i % 3 == 0:
      data = npts_lbins_map[j,:,:]
    elif i % 3 == 1:
      data = sigx_lbins_med_map[j,:,:]
    elif i % 3 == 2:
      data = sigy_lbins_med_map[j,:,:]
    plt.subplot(3,nbins,pos)
    if pos <= 5:
      im1.append(plt.imshow(data, interpolation='none', origin='lower', extent=[lonst_all.min(), lonst_all.max(), lathg_all.min(), lathg_all.max()]))
    elif pos > 5:
      im2.append(plt.imshow(data, interpolation='none', origin='lower', extent=[lonst_all.min(), lonst_all.max(), lathg_all.min(), lathg_all.max()]))
    if pos == 5:
      ax1 = plt.gca()
      divider1 = make_axes_locatable(ax1)
      cax1 = divider1.append_axes("right", size="5%", pad=0.05)
    elif pos == 15:
      ax2 = plt.gca()
      divider2 = make_axes_locatable(ax2)
      cax2 = divider2.append_axes("right", size="5%", pad=0.05)
    plt.xlabel('Stonyhurst longitude [deg]')
    plt.ylabel('latitude [deg]')