【问题标题】:One colorbar when plotting two different data sets next to each other将两个不同的数据集彼此相邻绘制时的一个颜色条
【发布时间】:2021-08-13 08:39:28
【问题描述】:

我一直在尝试绘制两个相邻的数据集。 有人在之前的帖子中提出了这种方法。但是,我现在无法为每个数据集获取一个颜色条(因此 data1 一个颜色条,data2 另一个颜色条)。

我使用的是合成数据集,但在我的真实数据集中,我有非常不同的最大值和最小值,比如 -.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()

【问题讨论】:

    标签: python numpy matplotlib jupyter


    【解决方案1】:

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

    据我了解,您希望所有这些子图只有一个颜色条。那为什么不单独做一个呢?我认为您的数据都有相同的 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)
    

    输出:

    这是你想要的吗?

    【讨论】:

    • 抱歉!让我再次检查代码并根据您的建议尝试一下。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多