【问题标题】:Matplotlib - Correlation plots with different range of numbers but on same scaleMatplotlib - 具有不同数字范围但比例相同的相关图
【发布时间】:2021-04-18 05:57:53
【问题描述】:

我想要一个包含 6 个相关图的 2 x 3 数字,共享相同的比例,即使图中的值具有不同的范围。下面你可以看到我到目前为止所拥有的。

在第一列中,值的范围从 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())        

【问题讨论】:

    标签: matplotlib plot colors scale correlation


    【解决方案1】:

    您需要向matshow() 提供norm= 参数,以便将数据缩放到[-1, 1] 范围,而不是由数据中存在的最小值和最大值定义的范围。详情请见Colormap Normalization。

    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)
    

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2023-04-09
      • 2019-04-17
      • 2019-08-18
      相关资源
      最近更新 更多