我试图在旋转的pandas数据框架上使用热像图形式seaborn,就像在超链接中工作一样
df = pd.DataFrame(np.random.randint(1,100,size = (3,2)))
df.columns = ['A','B']
df
sns.heatmap(df, annot=True, fmt="d", linewidths=.5,cmap="RdYlGn")
Output of code block - Entire Dataframe formatted as single heatmap 输出选择45作为min,86作为最大值,颜色代码整个数据帧
但我无法做的是明智地应用热图列 即像条件格式应用列colummn而不是整个数据帧。就像在这个超链接的例子中一样 -
对于col1,最小值45和最大值88被挑选并格式化为col2 70&分别挑选86个 条件格式化列,但仍显示为表格。 。在示例中,我看到df的其余部分被设为零,并且只有1列被格式化或整个数据帧得到格式化
请有人帮忙吗
答案 0 :(得分:2)
感谢@ Implus3H那个例子有帮助 以下是代码的修改版本作为函数,可以执行列式条件格式,以防万一它对其他人有用
df是一个输入数据帧,默认情况下,在下面的示例函数中,其列将采用颜色编码的红色阴影
def columnwise_conditionalformat(df, color = 'Reds'):
nrows = len(df)
ncols = len(df.columns)
fig, ax = plt.subplots()
for i in range(ncols):
truthar = [True]*ncols
truthar[i] = False
mask = truthar = np.array(nrows * [truthar], dtype=bool)
red = np.ma.masked_where(mask, df)
ax.pcolormesh(red, cmap=color)
for y in range(df.shape[0]):
for x in range(df.shape[1]):
plt.text(x+.5,y+.5,'%.1f'% df.ix[y, x],
horizontalalignment='center',
verticalalignment='center'
)
plt.show()
答案 1 :(得分:1)
您还可以将每列的比例缩放为最小值为零,最大值为1,将其传递到热图,并使用原始值进行注释。
scaled_df = (df - df.min(axis=0))/(df.max(axis=0) - df.min(axis=0))
sns.heatmap(scaled_df, annot=df, fmt="d", linewidths=.5, cmap="RdYlGn")
请注意,您可能需要使用cbar=False
删除颜色栏,因为解决方案的每一列必然需要不同的比例。
或者,可以使用sklearn.preprocessing.minmax_scale
代替手动缩放。
from sklearn.preprocessing import minmax_scale
scaled_df = minmax_scale(df)
sns.heatmap(scaled_df, annot=df, fmt="d", linewidths=.5, cmap="RdYlGn")