Pys*_*che 5 python heatmap dataframe seaborn
我试图在像超链接那样工作的超链接中使用一个热图形式 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")
Run Code Online (Sandbox Code Playgroud)
代码块的输出 - 整个数据帧格式化为单个热图 输出选择 45 作为最小值,86 作为最大值,并对整个数据帧进行颜色编码
但是我无法做的是明智地应用热图列,即像按列而不是整个数据框应用列的条件格式一样。就像这个超链接中的例子一样 -
对于 col1,选择并格式化了 45 的最小值和 88 的最大值,对于 col2,分别选择了 70 和 86 条件格式的列,但仍显示为表格。. 在示例中,我看到 df 的其余部分被设置为零并且只有 1 列被格式化,或者整个数据框都被格式化
任何人都可以帮忙吗
您还可以将每列缩放为最小值 0 和最大值 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")
Run Code Online (Sandbox Code Playgroud)
请注意,您可能希望删除颜色条,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")
Run Code Online (Sandbox Code Playgroud)
感谢@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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3045 次 |
最近记录: |