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

2024-05-17 02:52:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Example plot

要做到这一点,目前我必须为每个颜色条创建一个新的轴,其值手动定义如下

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应该这样做),然后将其拆分为任意数量的子轴,然后用于放置色条吗


Tags: addsize颜色plt手动axcsgcf
1条回答
网友
1楼 · 发布于 2024-05-17 02:52:45

正如@T先生在上面所说的,gridspec是一种非常好的方法。您可能希望为更复杂的布局嵌套GridSpec,但是:

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()

enter image description here

相关问题 更多 >