[英]Seaborn Heatmap Custom colormap
嗨,我刚刚为 seaborn 热图创建了自定义 cmap,但是当我想使用它时,它没有显示正确的颜色。 我一步一步完成了:
import seaborn as sns
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matrix = np.array([[149030, 34],[7442, 12]])
norm = matplotlib.colors.Normalize(matrix.min(), matrix.max())
boundaries = [value for value in matrix.flatten().tolist()]
list.sort(boundaries)
colors = [[norm(boundaries[0]), "#90AFC5"],
[norm(boundaries[1]), "#336B87"],
[norm(boundaries[2]), "#2a3132"],
[norm(boundaries[3]), "#763626"]]
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", colors)
fig = plt.figure(figsize=(6, 6))
ax = plt.subplot()
annot = np.array([[f"{matrix[0,0]}", f"{matrix[0,1]}"],
[f"{matrix[1,0]}", f"{matrix[1,1]}"]], dtype=object)
sns.heatmap(matrix,
annot=annot,
annot_kws={"size": 11},
fmt="",
ax=ax,
vmin=matrix.min(),
vmax=matrix.max(),
cmap=cmap,
cbar=True,
cbar_kws={'format': '%.0f%%', 'ticks': boundaries, 'drawedges': True},
xticklabels=False,
yticklabels=False)
如您所见,我的 output 有两个蓝色列,但我定义了不同的 colors:
如果您使用BoundaryNorm
,您可以为边界之间的范围提供 colors 。 要获得 4 个范围,您需要 5 个边界。 一种方法是在末尾添加一个额外的边界。 在问题中,不清楚您想对与边界不重合的颜色值做什么。 在下面的代码中,颜色用于边界值和直到下一个边界的范围。
import seaborn as sns
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matrix = np.array([[149030, 34], [7442, 12]])
boundaries = [value for value in matrix.flatten().tolist()]
list.sort(boundaries)
colors = ["#90AFC5", "#336B87", "#2a3132", "#763626"]
norm = matplotlib.colors.BoundaryNorm(boundaries=boundaries + [boundaries[-1]], ncolors=256)
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", colors)
fig = plt.figure(figsize=(6, 6))
ax = plt.subplot()
annot = np.array([[f"{matrix[0, 0]}", f"{matrix[0, 1]}"],
[f"{matrix[1, 0]}", f"{matrix[1, 1]}"]], dtype=object)
sns.heatmap(matrix,
annot=annot,
annot_kws={"size": 11},
fmt="",
ax=ax,
cmap=cmap,
norm=norm,
cbar=True,
cbar_kws={'format': '%.0f%%', 'ticks': boundaries, 'drawedges': True},
xticklabels=False,
yticklabels=False)
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.