与热图类似的问题一样,但对于分类变量,但使用python和seaborn而不是R:
想象一下,我有以下数据帧:
df = pd.DataFrame({"John":"No Yes Maybe".split(),
"Elly":"Yes Yes Yes".split(),
"George":"No Maybe No".split()},
index="Mon Tue Wed".split())
Run Code Online (Sandbox Code Playgroud)
现在我想绘制一个热图,并按照相应的值为每个单元格着色.那就是"是","否","可能",例如变成"绿色","灰色","黄色".图例应该具有这三种颜色和相应的值.
我自己用以下方式解决了这个问题.我似乎无法将分类颜色映射传递给seaborn的热图,因此我用数字替换所有文本并重新构建seaborn内部使用的颜色映射,即:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
# create dictionary with value to integer mappings
value_to_int = {value: i for i, value in enumerate(sorted(pd.unique(df.values.ravel())))}
f, ax = plt.subplots()
hm = sns.heatmap(df.replace(value_to_int).T, cmap="Pastel2", ax=ax, cbar=False)
# add legend
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.7, …Run Code Online (Sandbox Code Playgroud)