首页 > 解决方案 > pyplot colormap 和 bar 与值不对应

问题描述

一些远远超出我理解的原因,我设置了两个不同的热图,虽然一个工作得很好,第二个将几种不同的颜色映射到相同的 z 数(例如 0),并且颜色条完全颠倒了。

所以,我的第一个热图是这样的:

在此处输入图像描述

它的生成代码是:

data = mcs(n,k)         # the monte carlo simulation that returns my 2d numpy array

fig, ax = plt.subplots()
im = ax.imshow(data, cmap="inferno")

ax.set_xticks(np.arange(len(data)))
ax.set_yticks(np.arange(len(data)))

ax.set_xticklabels(data.index)
ax.set_yticklabels(data.columns)

plt.setp(ax.get_xticklabels(), rotation=45, ha="right",
         rotation_mode="anchor")
plt.gca().invert_yaxis()

for i in range(len(data.index)):
    for j in range(len(data.columns)):
        text = ax.text(j, i, f"{int(data[i+1][j+1]):2}%",
                       ha="center", va="center", color="w")

ax.set_title("Percentage of success on a contested check")
ax.set_xlabel("Attacker poll size")
ax.set_ylabel("Defender pool size")
fig.tight_layout()
plt.show()

但后来我尝试了第二个热图,由一个非常相似的函数创建,并带有一个颜色条。但结果却大不相同……

在此处输入图像描述

和代码:

data = mcs_fixed(n, k)

fig, ax = plt.subplots()
im = ax.imshow(data, cmap="viridis")
cb = plt.colorbar(im)


ax.set_xticks(np.arange(len(data)))
ax.set_yticks(np.arange(len(data)))

ax.set_xticklabels(data.index)
ax.set_yticklabels(data.columns)

plt.setp(ax.get_xticklabels(), rotation=45, ha="right",
         rotation_mode="anchor")
plt.gca().invert_yaxis()

for i in range(len(data.index)):
    for j in range(len(data.columns)):
        text = ax.text(j, i, f"{int(data[i+1][j+1]):2}%",
                       ha="center", va="center", color="w")

ax.set_title("Percentage of success on a skill check")
ax.set_xlabel("Challenger poll size")
ax.set_ylabel("Established difficulty")
fig.tight_layout()
plt.show()

为什么一些许多零映射到不同的颜色,而地图根本没有意义?为什么颜色条颜色会反转?我尝试反转颜色条 y 轴,但它同时反转了颜色和数字,因此无法解决问题。

有什么建议么?

编辑:我完全忘了说,正在导入的数据是熊猫数据框。我将数据更改为列表,Colorbar 工作得非常好。轴倒转了,虽然...

编辑2:这里有一小部分数据来重现结果。

test_case = [[40.0, 2.0, 0.0, 0.0],
         [64.0, 19.0, 3.0, 0.0],
         [78.0, 39.0, 15.0, 4.0],
         [88.0, 55.0, 25.0, 4.0]]

data = pd.DataFrame(test_case)
data.index += 1
data.columns += 1

标签: pythonmatplotlibheatmapcolorbarcolormap

解决方案


推荐阅读