【问题标题】:Exclude a column from Seaborn Heatmap formatting, but keep in the map从 Seaborn 热图格式中排除列,但保留在地图中
【发布时间】:2018-12-04 05:08:08
【问题描述】:

所以我的桌子看起来有点像这样:

Cl1  Cl2  Cl3  Sum
0.7  0.9  0.9  2.5
0.8  1.5  0.9  3.2
2.4  2.8  2.1  7.3

我希望将热图颜色应用于第 1-3 列,但不适用于Sum,因为它会从热图中提取所有内容并使列看起来平淡无奇。

我现在想出的只是将 Sum 值除以 100,但这会让读者感到困惑,需要解释。

有没有办法不格式化 Sum 列,但保持其值不变?

一些代码开始:

import numpy as np
import pandas as pd
import seaborn as sns

df = pd.DataFrame(np.random.rand(3,3), columns='Cl1 Cl2 Cl3'.split())

df['Sum'] = 0
for i in df.index:
    df['Sum'].iloc[i] = np.sum(df.iloc[i])

sns.heatmap(df, annot=True, cmap='Reds')

【问题讨论】:

  • 如果您发布一段我们可以开始使用的可用代码,您会得到更快的回复。
  • @chthonicdaemon 好的,请稍等

标签: python data-visualization seaborn


【解决方案1】:

使用遮罩并使用 for 循环为遮罩区域添加文本。

mask = np.zeros((3, 4))
mask[:,3] = True
ax = sns.heatmap(df, mask=mask, annot=True,
             vmin=df.values[:,:3].ravel().min(),
             vmax=df.values[:,:3].ravel().max(),
             annot_kws={"size": 20, "color":"g"})


for (j,i), label in np.ndenumerate(df.values):
    if i == 3:
        ax.text(i+0.5, j+0.5, label, 
                fontdict=dict(ha='center',  va='center',
                                         color='g', fontsize=20))


替换循环的替代方案:

mask = np.zeros((3, 4))
mask[:,3] = True
sns.heatmap(df, mask=mask)
sns.heatmap(df, alpha=0, cbar=False, annot=True, annot_kws={"size": 20, "color":"g"})

导致相同的结果

【讨论】:

  • 要摆脱循环,您可能会在最后考虑我的编辑。
  • @KhalilAlHooti 嗯,你能详细解释一下吗?因为我测试了上面的代码,最初导入的当然是numpyseabornpandas,结果和你之前发布的一样。
  • 是的,它正在工作,感谢您的编辑,比使用 for 循环更容易,我错过了有两个 sns.heatmaps!多谢。问候,@SpghttCd
【解决方案2】:

如果您的目标只是在笔记本中查看它的外观,则可以使用 pandas 样式:

import pandas as pd
import seaborn as sns
import io

df = pd.read_fwf(io.StringIO("""Cl1  Cl2  Cl3  Sum
0.7  0.9  0.9  2.5
0.8  1.5  0.9  3.2
2.4  2.8  2.1  7.3"""))


cm = sns.light_palette("green", as_cmap=True)

df.style.background_gradient(subset=['Cl1', 'Cl2', 'Cl3'], 
                             low=0, high=3, cmap=cm)

结果:

【讨论】:

  • 感谢您提供更简单的解决方案
猜你喜欢
  • 2021-04-17
  • 2020-10-12
  • 2014-06-09
  • 2016-05-02
  • 1970-01-01
  • 2020-12-26
  • 2018-05-15
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多