python - 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
解决方案
推荐阅读
- rest - 通过 REST API 从 Google Fit 获取所有跑步活动
- html - CSS Grid 根据内容将行推到顶部
- c# - 订阅事件时无法创建用户控件的实例
- python - 对 pandas 数据框中的元素进行排名
- python - Python 无法读取最新的 Outlook 附件,只能读取较旧的附件
- c - 将连续除法的其余部分存储在数组中
- javascript - io.sockets.in(room).emit() 不工作
- html - 我如何向这个 flexbox 布局添加响应式设计?
- html - 如何检查 Handlebars 模板中的多个条件?
- ethereum - 获取每个钱包地址余额