当调色板发散时,如何使用最小值和最大值设置热图颜色?

Posted

技术标签:

【中文标题】当调色板发散时,如何使用最小值和最大值设置热图颜色?【英文标题】:How do I set heatmap colors with min and max values when the colorpalette is diverging? 【发布时间】:2017-10-01 13:50:11 【问题描述】:

我想设置调色板比例的最大值和最小值。在下面的示例中,我希望调色板的比例从 -10 到 50,就好像它是一个连续的颜色图一样。我真的不在乎突出数字越过“零线”的位置。

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np  
import pandas as pd  
import seaborn as sns

index = np.arange(0, 50)
data = np.random.uniform(low=-10, high=100, size=(50,50))
dft = pd.DataFrame(index=index, columns=index, data=data)
fig, ax = plt.subplots(figsize=(10,10))
cbar_ax = fig.add_axes([.905, 0.125, .05, 0.755])
ax = sns.heatmap(dft, linewidths=.5, cmap=cm.YlGnBu, cbar_kws='label': 'label',
                 ax=ax, square=True, cbar_ax=cbar_ax, center=55)
plt.show()

如果我这样做:

ax = sns.heatmap(dft, linewidths=.5, cmap=cm.YlGnBu, cbar_kws='label': 'label',
                 ax=ax, square=True, cbar_ax=cbar_ax, vmax=50, vmin=-10)

调色板从 -50 变为 50,vmin=-10 被忽略。

【问题讨论】:

【参考方案1】:

来自docs(对于vmin、vmax),

当推断出一个发散的数据集时,这些值之一可能会被忽略。

您应该使用center 参数来指定颜色图的中心值,并结合vmaxvmin 之一来指定限制。

vmin, vmax = -10, 50
sns.heatmap(..., center=(vmin + vmax) / 2., vmax=vmax)

【讨论】:

以上是关于当调色板发散时,如何使用最小值和最大值设置热图颜色?的主要内容,如果未能解决你的问题,请参考以下文章

颜色设置和调色板

R:基于组的颜色的热图,灰色的 NA 值和包含的字符

在 seaborn 热图上设置颜色条的最大值

jQuery通过验证设置电话号码的最小值和最大值

使用OpenGL从矩阵绘制热图的最有效方法?

如何使用c#设置日期时间图表的最小值和最大值?