python - 类似热图的图未显示正确的颜色
问题描述
我有一个数据框df
,其中包含此列表中的一些值['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
,但有时并非所有值都出现在 中df
,例如:
df = pd.DataFrame([['a','b','c'],['b','c','e'],['a', 'e', 'f']])
df
我用下面的代码绘制了一个类似热图的图:
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
import pandas as pd
data = [['a','b','c'],['b','c','e'],['a', 'e', 'f']]
df = pd.DataFrame(data)
value = ['a','b','c', 'd', 'e', 'f', 'g', 'h', 'i','j']
value_to_int = {j:i for i,j in enumerate(value)}
n = len(value_to_int)
#color for value
cmap = ['#b3e6b3', '#66cc66', '#2d862d', '#ffc299','#ff944d', '#ff6600','#ccddff','#99bbff','#4d88ff','#0044cc']
# plot
fig, ax = plt.subplots(figsize = (5, 5))
ax = sns.heatmap(df.replace(value_to_int), cmap=cmap, linewidths = 0.005, annot = False)
#add value into plot
text = df.to_numpy()
for r in range(text.shape[0]):
for c in range(text.shape[1]):
ax.text(c+0.5,r+0.5, text[r,c],
va='center',ha='center')
# modify colorbar:
colorbar = ax.collections[0].colorbar
r = colorbar.vmax - colorbar.vmin
colorbar.set_ticks([colorbar.vmin + r / n * (0.5 + i) for i in range(n)])
colorbar.set_ticklabels(list(value_to_int.keys()))
plt.show()
但我得到的情节不正确,颜色与值不符,例如'c'
应该是深绿色,热图上是橙色等。
如何修改我的代码以显示正确的颜色?太感谢了
解决方案
简短的回答:添加vmin=0, vmax=9
到sns.heatmap
通话中。它与图形的比例和颜色条有关。
推荐阅读
- android - LiveData Consumer in BaseFragment not receiving updates from BaseViewModel
- ios - 如何将应用页面链接到 Xcode 12 上的网站?
- excel - 从表字段中获取最大值并将其作为参数解析到该列,以用于同一列的所有记录相减
- ruby - 尝试通过在数组上使用 #.each 来使用 Procs 数组,但出现错误
- java - 一对多与轻量级多
- javascript - 如何删除引导轮播指示器编号?
- c - 你能告诉我为什么我从链表中选择随机字符串的函数不起作用吗?
- html - 响应两个彩色波
- nginx - nginx 缓存 index.html 强制重新加载
- typescript - 左/右任务的分区列表