如何自动将多个颜色条彼此相邻放置在同一轴上

How to place multiple colorbars next to each other in the same axis automatically

我有一个图(下面的例子),我需要在同一个轴上放置多个颜色条

为此,目前我必须为每个颜色条创建一个新轴,并像这样手动定义值

x_cbar_0, y_cbar_0, x_cbar_size, y_cbar_size     = 0.18, 0.05, 0.3, 0.02
x_cbar2_0, y_cbar2_0, x_cbar2_size, y_cbar2_size = 0.55, 0.05, 0.3, 0.02

ax_cbar = plt.gcf().add_axes([x_cbar_0, y_cbar_0, x_cbar_size, y_cbar_size])
ax_cbar_2 = plt.gcf().add_axes([x_cbar2_0, y_cbar2_0, x_cbar2_size, y_cbar2_size])
cbar_snow = plt.gcf().colorbar(cs_snow, cax=ax_cbar, orientation='horizontal',
 label='Snow')
cbar_rain = plt.gcf().colorbar(cs_rain, cax=ax_cbar_2, orientation='horizontal',
 label='Rain')

这不是一个真正的便携式解决方案,因为当某些东西发生变化时,例如地图投影,绘图的大小会稍微调整,我必须调整这些数字以手动放置颜色条而不重叠。

有没有办法自动创建一个与图形宽度相同的新轴(我相信 mpl_toolkits.axes_grid1.axes_divider 应该这样做)然后将其分成任意数量的子轴,这些子轴可以然后用来放置颜色条?

作为@先生。上面说了,gridspec 是一个很好的方法。您可能希望为更复杂的布局嵌套 gridspecs,但是:

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(constrained_layout=True)

gs = fig.add_gridspec(2, 3, height_ratios=[1, 0.05], width_ratios=[1, 0.2, 1])

ax = fig.add_subplot(gs[0, :])

pc1 = ax.pcolormesh(np.random.randn(20, 20), cmap='viridis')
pc2 = ax.pcolormesh(np.random.randn(20, 20), cmap='RdBu_r')

cax1 = fig.add_subplot(gs[1, 0])
fig.colorbar(pc1, cax=cax1, orientation='horizontal')

cax2 = fig.add_subplot(gs[1, -1])
fig.colorbar(pc2, cax=cax2, orientation='horizontal', extend='max')

plt.show()