绘制彼此相邻的两个不同数据集时的一个颜色条

One colorbar when plotting two different data sets next to each other

我一直在尝试绘制彼此相邻的两个数据集。 有人在之前的 post 中好心地建议了这种方法。但是,我现在无法为每个数据集获取一个颜色条(因此数据 1 有一个颜色条,数据 2 有另一个颜色条)。

我使用的是合成数据集,但在我的真实数据集中,我有非常不同的最大值和最小值,比如 -.4 到 .4 或 -.6 到 .8,所以对于这个示例数据集,如何为两个数据集分别制作一个颜色条?

每个单独的图都有一个颜色条,但我的目标是拥有这 32 个图,但只有两个颜色条:一个用于数据集“data1”,另一个用于数据集“data2”。

这是我目前拥有的:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import xarray as xr 

data1 = np.random.rand(16, 20, 15)
data2 = np.random.rand(16,20,15)


fig, axes = plt.subplots(nrows=8, ncols=4, figsize=(10,20))
axes = axes.ravel()

# plot the data in pairs
for i in range(16):
    data1 = axes[2*i].pcolormesh(data1[i])
    axes[2*i].set_title(f'data1[{i}]')
    cbar1 = fig.colorbar(x, fraction=.2,ax=axes[2*i])
    data2 = axes[2*i+1].pcolormesh(data2[i])
    axes[2*i+1].set_title(f'data2[{i}]')
    cbar2 = fig.colorbar(y, fraction=.2,ax=axes[2*i+1])

for ax in axes:
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.grid()
plt.tight_layout()
plt.show()

我也试过这种方式,它给出了一个颜色条...但我意识到它只是显示 last 等高线图的颜色条(因为颜色条功能不是在循环)。我希望只有一个基于所有图的颜色条。 这种方式是错误的*但是尝试根据每个数据集(data1 和 data2)只获得一个颜色条。

fig, axes = plt.subplots(nrows=8, ncols=4, figsize=(10,20))
axes = axes.ravel()

# plot the data in pairs
for i in range(16):
    data1 = axes[2*i].pcolormesh(data1[i])
    axes[2*i].set_title(f'data1[{i}]')
    #cbar1 = fig.colorbar(x, fraction=.2,ax=axes[2*i])
    data2 = axes[2*i+1].pcolormesh(data2[i])
    axes[2*i+1].set_title(f'data2[{i}]')
    #cbar2 = fig.colorbar(y, fraction=.2,ax=axes[2*i+1])

for ax in axes:
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.grid()
    
cbaxes1 = fig.add_axes([1.02,.85,.05,.1]) 
cbar1 = fig.colorbar(data1, cax = cbaxes1, fraction=.02)
cbar1.set_label('data1',labelpad=15, y=.5, rotation=90,fontsize=20)

cbaxes = fig.add_axes([1.2,.85,.05,.1]) 
cbar = fig.colorbar(data2, cax = cbaxes, fraction=.02)
cbar.set_label('data2',labelpad=15, y=.5, rotation=90,fontsize=20)

plt.tight_layout()
plt.show()

我复制了你的代码 运行 但它不起作用。

据我了解,您希望所有这些子图都只有一个颜色条。那为什么不单独做一个呢?我认为你的数据都有相同的 x 和 y 限制,所以我不明白为什么不单独制作一个的问题。

fig, axes = plt.subplots(nrows=8, ncols=5, figsize=(10,20))
axes = axes.ravel()

for i in range(8):
    axes[(i+1)*5-1].axis('off')

axcbar = fig.add_subplot(1,2,2)
axcbar.axis('off')

f = axcbar.scatter(1,1, c=1, vmin=0, vmax=1, visible=False)
cbar = plt.colorbar(f)

输出:

这是你想要的吗?