【发布时间】:2019-03-08 15:56:08
【问题描述】:
我正在使用 matplotlib 和 seaborn 创建我的相关矩阵的热图,其中特定颜色代表数据范围。我面临一个问题,即我的颜色条不能代表热图中的全部颜色。 编辑:问题在于-0.5到-0.3范围内的颜色条。这里的颜色应该是“宝蓝色”。正确的颜色显示在热图中,而不是颜色条。
这是我的热图代码:
from matplotlib import colors
cmap = colors.ListedColormap(["navy", "royalblue", "lightsteelblue", "beige", "peachpuff", "salmon", "darkred"])
bounds = [-1, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 1]
norm = colors.BoundaryNorm(bounds, cmap.N)
这适用于我的数据,corr_matrix。
#Generate mask for correlation matrix
mask = np.zeros_like(corr_matrix, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
#print the correlation matrix
fig, ax = plt.subplots()
sns.heatmap(corr_matrix, annot=True, fmt='.4f', cmap=cmap, norm=norm, mask=mask, cbar=True, ax=ax, cbar_kws=dict(ticks=[-1, -0.5, -0.3, -0.1, +0.1, +0.3, +0.5, +1]))
ax.set_title('Correllation Matrix')
ax.set_yticklabels(ax.get_yticklabels(), rotation="horizontal")
plt.show()
谢谢!
【问题讨论】:
-
看起来热图颜色与您的颜色条正确对齐。颜色条涵盖从 -1 到 1 的值范围。热图中的值不使用 -1 到 1 的完整范围,因此您看不到颜色条最末端的某些颜色。还是我误解了您要做什么?
-
我认为“唯一”的问题是颜色条在 [-0.5,-0.3] 范围内显示错误的颜色,对吗?其他一切看起来都符合预期。
-
看看documentation on sns correlation matrix。您正在使用
cbar_kws,它绝对有效,并且根据您传递的ticks=[-1, -0.5, -0.3, -0.1, +0.1, +0.3, +0.5, +1]准确返回预期的结果。但在文档中查看vmax=、center=,还有一个vmin=。随意将您需要的值放在那里并“让代码完成剩下的工作”我使用链接文档方法,因为它对于非 Python 本地人 (IMO) 更具可读性。但是请用什么错误更新您的问题 -
@MattR 您不能在这里使用
vmax和center来实现不相等的分箱。
标签: python pandas numpy matplotlib seaborn