热图上的中心颜色条标签

问题描述 投票:0回答:2

我见过一些类似的问题,但无法使其发挥作用,所以我想我会在这里问。

我有一个 Seaborn 热图,其中有 2 个重叠的散点图。当它绘制颜色条时,标签不以颜色为中心。我想知道如何将值集中在颜色上。另外是否可以始终将 0 颜色设置为白色?我的代码和情节如下

fig, ax = plt.subplots(figsize=(20, 20))

plt.gca().set_aspect(RI/SI)
cbar_kws=dict(pad=0.01,shrink=0.86, drawedges=True, ticks=range(int(maxfold)+1)) #Colorbar size and location 

cmap = plt.get_cmap('jet', maxfold+1)

sns.heatmap(binspivot, cmap=cmap,linewidths=0.01, linecolor = 'black', vmin=0, vmax=maxfold, xticklabels=False, yticklabels=False,annot=True, annot_kws={"size": 20,"color":"black"},cbar_kws=cbar_kws)
ax.set(xlabel=None, ylabel=None)
ax.scatter(Sourcedfcut['Xmod'],Sourcedfcut['Ymod'], color="red", s = 400)
ax.scatter(Recdfcut['Xmod'],Recdfcut['Ymod'], color="blue", s= 400)

Results

python matplotlib seaborn colorbar
2个回答
2
投票

将颜色条的刻度线置于矩形中心的最简单方法是将

vmin
vmax
移动一半。 要向现有颜色图添加额外的颜色,可以使用新颜色和从原始颜色图提取的颜色创建新的
ListedColormap
。为了使颜色栏中的白色在白色背景下可见,可以添加黑色周围的矩形。

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import seaborn as sns
import numpy as np

binspivot = (12.02 * np.random.rand(20, 20) ** .5).astype(int)
maxfold = binspivot.max()
fig, ax = plt.subplots(figsize=(20, 20))

cbar_kws = dict(pad=0.01, shrink=0.86, drawedges=True, ticks=range(int(maxfold) + 1))  # Colorbar size and location

cmap1 = plt.get_cmap('turbo', maxfold + 1)
colors = ['white'] + list(plt.get_cmap('turbo', maxfold).colors)
cmap = ListedColormap(colors=colors)

sns.heatmap(binspivot, cmap=cmap, linewidths=0.01, linecolor='black', vmin=-0.5, vmax=maxfold + 0.5,
            xticklabels=False, yticklabels=False,
            annot=True, annot_kws={"size": 20}, cbar_kws=cbar_kws, ax=ax)
ax.set(xlabel=None, ylabel=None)
cbar_ax = fig.axes[-1]
cbar_ax.tick_params(labelsize=20)
cbar_ax.add_patch(plt.Rectangle((0, 0), 1, 1, fc='none', ec='black', clip_on=False, transform=cbar_ax.transAxes))
plt.tight_layout()
plt.show()

sns.heatmap, colorbar tick labels centered


0
投票

使值的颜色为 0 的另一种方法是设置一个 mask,因为 seaborn 将从热图中删除这些单元格,并显示(白色)背景:

sns.heatmap(data, mask=(data==0), ...)

确实如此,“值 0 的颜色”“颜色 0” 不同,但您始终可以设置一个阈值来指示要在热图着色中忽略哪些值,例如

mask=(data<1.2)

© www.soinside.com 2019 - 2024. All rights reserved.