如何在seaborn热图中更改特定方块的颜色?

6

我正在尝试在seaborn(python)中创建热力图,并使用不同的颜色着色某些方格(这些方格包含不重要的数据 - 在我的情况下,它将是值小于1.3的方格, 这是 -log 的p- 值>0.05)。我找不到这样的功能。遮罩这些方格也没有起作用。下面是我的代码:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
import seaborn as sns; sns.set()
data = [[1.3531363408, 3.339479161, 0.0760855365], [5.1167382617, 3.2890920405, 2.4764601828], [0.0025058257, 2.3165128345, 1.6532714962], [0.2600549869, 5.8427407219, 6.6627226609], [3.0828581725, 16.3825494439, 12.6722666929], [2.3386307357, 13.7275065772, 12.5760972276], [1.224683813, 2.2213656372, 0.6300876451], [0.4163788387, 1.8128374089, 0.0013106046], [0.0277592882, 2.9286203949, 0.810978992], [0.0086613622, 0.6181261247, 1.8287878837], [1.0174519889, 0.2621290291, 0.1922637697], [3.4687429571, 4.0061981716, 0.5507951444], [7.4201304939, 3.881457516, 0.1294141768], [2.5227546319, 6.0526491816, 0.3814362442], [8.147538027, 14.0975727815, 7.9755706939]]
cmap2 = mpl.colors.ListedColormap(sns.cubehelix_palette(n_colors=20, start=0, rot=0.4, gamma=1, hue=0.8, light=0.85, dark=0.15, reverse=False))
ax = sns.heatmap(data, cmap=cmap2, vmin=0)
plt.show()

我想补充一下,我不是非常高级的程序员。


这个问题是关于注释的,但基本方法与你的问题类似。 - mwaskom
顺便提一下,在 cubehelix_palette 中你可以直接使用 as_cmap=True,不需要自己创建颜色映射对象。 - mwaskom
确实,那个链接很有用。 - Ilona
1个回答

13

好的,现在我可以自己回答我的问题了 :) 这是解决问题的代码:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
import seaborn as sns; sns.set()

data = np.array([[1.3531363408, 3.339479161, 0.0760855365],
                 [5.1167382617, 3.2890920405, 2.4764601828],
                 [0.0025058257, 2.3165128345, 1.6532714962],
                 [0.2600549869, 5.8427407219, 6.6627226609],
                 [3.0828581725, 16.3825494439, 12.6722666929],
                 [2.3386307357, 13.7275065772, 12.5760972276],
                 [1.224683813, 2.2213656372, 0.6300876451],
                 [0.4163788387, 1.8128374089, 0.0013106046],
                 [0.0277592882, 2.9286203949, 0.810978992],
                 [0.0086613622, 0.6181261247, 1.8287878837],
                 [1.0174519889, 0.2621290291, 0.1922637697],
                 [3.4687429571, 4.0061981716, 0.5507951444],
                 [7.4201304939, 3.881457516, 0.1294141768],
                 [2.5227546319, 6.0526491816, 0.3814362442],
                 [8.147538027, 14.0975727815, 7.9755706939]])
cmap1 = mpl.colors.ListedColormap(['c'])

fig, ax = plt.subplots(figsize=(8, 8))
sns.heatmap(data, ax=ax)
sns.heatmap(data, mask=data > 1.3, cmap=cmap1, cbar=False, ax=ax)
plt.show()

这里输入图片描述

因为掩码只能用于数组而不能用于列表,所以以前无法使用掩码的问题得到了解决。 另外一件事就是将热图绘制两次 - 第二次使用掩码。 我仍然不明白的是,它屏蔽了与所述相反的区域.. 我想屏蔽小于1.3的值,但它却将大于1.3的值着色.. 所以我写了mask=data >1.3,现在它可以正常工作了...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接