Matplotlib-具有不同数字范围但比例相同的相关图

Matplotlib-具有不同数字范围但比例相同的相关图,matplotlib,plot,colors,scale,correlation,Matplotlib,Plot,Colors,Scale,Correlation,我希望有一个2×3的图,有6个相关图,共享相同的比例,即使图中的值有不同的范围。下面你可以看到我到目前为止所做的 在第一列中,值的范围为0到1,对角线上为1,其他位置接近0。对于其他两列,它在顶行中的值范围为0到1,而在底行中的值范围为-1和1。第二列和第三列之间的差异在于,第二列中的值约为0.3(和-0.3),第三列中的值约为0.7(和-0.7) 正如你所看到的,有几件事情似乎是不正确的。首先,虽然我希望它们都按照相同的颜色比例绘制,深蓝色为-1,黄色为1,但情况显然不是这样。如果这一点成立

我希望有一个2×3的图,有6个相关图,共享相同的比例,即使图中的值有不同的范围。下面你可以看到我到目前为止所做的

在第一列中,值的范围为0到1,对角线上为1,其他位置接近0。对于其他两列,它在顶行中的值范围为0到1,而在底行中的值范围为-1和1。第二列和第三列之间的差异在于,第二列中的值约为0.3(和-0.3),第三列中的值约为0.7(和-0.7)

正如你所看到的,有几件事情似乎是不正确的。首先,虽然我希望它们都按照相同的颜色比例绘制,深蓝色为-1,黄色为1,但情况显然不是这样。如果这一点成立,我们将在第一列中显示亮蓝色/绿色。我可以做些什么来指示颜色的范围?接下来,如何更改右侧色标的标签?我想它的范围从-1到1

下面是我的实现

fig, ax = plt.subplots(nrows=2, ncols=3, figsize=(15,8))
idx_mixed = {False: 0, True: 1}
idx_rho = {0: 0, 0.3: 1, 0.7: 2}
for mixed in [False, True]:
    for rho in [0, 0.3, 0.7]:
        ax[idx_mixed[mixed]][idx_rho[rho]].matshow(results[mixed][rho])

ax[0][0].set_title("No correlation", pad=20, fontsize=14)
ax[0][1].set_title("Weakly correlated", pad=20, fontsize=14)
ax[0][2].set_title("Strongly correlated", pad=20, fontsize=14)
ax[0][0].set_ylabel("Positive correlations", fontsize = 14)
ax[1][0].set_ylabel("Mixed correlations", fontsize = 14)
fig.colorbar(mpl.cm.ScalarMappable(), ax=fig.get_axes())        

您需要为
matshow()
提供
norm=
参数,以便将数据缩放到范围[-1,1],而不是由数据中存在的最小值和最大值定义的范围。有关更多详细信息,请参阅

cmap = 'viridis'
norm = matplotlib.colors.Normalize(vmin=-1, vmax=1)
fig, axs = plt.subplots(2,3)
for ax, d in zip(axs.flat, data):
    m = ax.matshow(d, cmap=cmap, norm=norm)
fig.colorbar(m, ax=axs)