gpt4 book ai didi

python - seaborn 热图获取颜色代码值数组

转载 作者:行者123 更新时间:2023-12-02 17:21:48 25 4
gpt4 key购买 nike

我正在尝试获取与热图的每个单元格关联的颜色代码:

import seaborn as sns
import numpy as np
import matplotlib.cm as cm

hm = sns.heatmap(
np.random.randn(10,10),
cmap = cm.coolwarm)

# hm.<some function>[0][0] would return the color code of the cell indexed (0,0)

最佳答案

因为sns.heatmap返回的是一个matplotlib轴对象,所以我们不能直接使用hm。但是我们可以使用 cmap 对象本身来返回数据的 rgba 值。 编辑代码已更新以包含数据规范化。

from matplotlib.colors import Normalize

data = np.random.randn(10, 10)
cmap = cm.get_cmap('Greens')
hm = sns.heatmap(data, cmap=cmap)

# Normalize data
norm = Normalize(vmin=data.min(), vmax=data.max())
rgba_values = cmap(norm(data))

所有颜色现在都包含在 rgba_values 中。所以要获得热图中左上角方 block 的颜色,你可以简单地做

In [13]: rgba_values[0,0]
Out[13]: array([ 0. , 0.26666668, 0.10588235, 1. ])

有关更多信息,请查看 Getting individual colors from a color map in matplotlib


更新

要在调用 sns.heatmap 时使用 centerrobust 关键字重新调整颜色图,您基本上只需重新定义 vminvmax。查看相关的 seaborn 源代码 ( http://github.com/mwaskom/seaborn/blob/master/seaborn/matrix.py#L202 ),下面对 vminvmax 的更改应该可以解决问题。

data = np.random.randn(10, 10)
center = 2
robust = False
cmap = cm.coolwarm
hm = sns.heatmap(data, cmap=cmap, center=center, robust=robust)

vmin = np.percentile(data, 2) if robust else data.min()
vmax = np.percentile(data, 98) if robust else data.max()
vmin += center
vmax += center

norm = Normalize(vmin=vmin, vmax=vmax)
rgba_values = cmap(norm(data))

关于python - seaborn 热图获取颜色代码值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42125433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com