python - Seaborn HeatMap - 如何在多个不同的数据集中设置颜色分级

标签 python matplotlib graph heatmap seaborn

所以我需要在 seaborn 中创建大量具有不同数据尺度的热图。一些范围从 0-100 和一些 +100 到 -100。我需要做的是在所有图表中保持相同的颜色分级。因此,例如,我希望任何低于 0 的东西都从深蓝色稳定地变为浅蓝色,而任何高于 0 的东西都变得更深红色,例如下面可怕的示例图。

enter image description here

下面没有很好地显示我需要的是流畅的颜色过渡,因为目前我不完全确定 seaborn 是如何工作的,因为我刚刚列出了一些颜色 - 下面的代码

sns.heatmap(df.T, cmap=ListedColormap(['#000066','#000099','#0000cc','#1a1aff','#6666ff','#b3b3ff','#ffff00','#ffcccc','#ff9999','#ff6666','#ff3333','#ff0000']), annot=False)

感谢您的任何建议。

最佳答案

要指定颜色归一化,您可以使用 Normalize 实例,plt.Normalize(vmin, vmax) 并使用 norm 将其提供给热图 关键字(路由到底层 pcolormesh)。

要获得颜色逐渐变化的颜色图,您可以使用静态 LinearSegmentedColormap.from_list 方法并为其提供颜色列表。

import numpy as np; np.random.seed(0)
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors

x1 = np.random.randint(0,100,size=(12,8))
x2 = np.random.randint(-100,100,size=(12,8))

fig, axes = plt.subplots(ncols=2)

cmap = mcolors.LinearSegmentedColormap.from_list("n",['#000066','#000099','#0000cc','#1a1aff','#6666ff','#b3b3ff',
                       '#ffff00','#ffcccc','#ff9999','#ff6666','#ff3333','#ff0000'])
norm = plt.Normalize(-100,100)

sns.heatmap(x1, ax=axes[0], cmap=cmap, norm=norm)
sns.heatmap(x2, ax=axes[1], cmap=cmap, norm=norm)

plt.show()

enter image description here

关于python - Seaborn HeatMap - 如何在多个不同的数据集中设置颜色分级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44736213/

相关文章:

python - ModuleNotFoundError : What does it mean __main__ is not a package?

python - MatplotLib 3.0.1 中 ax.set_xlabel() 和 ax.xaxis.set_label() 的区别

python - 在 Jupyter Notebook 中使用 matplotlib 绘制动态变化的图形

python - 写入多个输出文件的程序的流式包装器

python - 如何在 Python 中使用 re 替换两个数字之间的字符?

python - 从 BeautifulSoup 中的 CSS 选择器获取 'hrefs' 的最佳方法?

python - 在散点图中创建 for 循环的问题

python - 尽管有数千个不同的数据点,plt.boxplot 仍显示空白

c++ - 测试图是否是树

php - SQL 查询动态创建的 Cytoscape 节点