多散点图如何统一颜色范围?高亮点颜色匹配问题
解决散点图高亮点颜色与原有色标不一致问题
问题核心原因:第一次调用scatter时,Matplotlib会根据y数组的整体数值范围自动生成颜色映射的归一化规则(Normalize)。第二次单独绘制单个点时,仅传入单个y[5715]值,Matplotlib会默认将该值的范围设为[y[5715], y[5715]],导致颜色映射规则和第一次不匹配,最终颜色不一致。
以下是两种可行的解决方案:
方案一:复用首次绘图的归一化对象
直接提取第一次scatter返回对象的归一化规则,用于第二次绘图:
# 基础绘图,保存返回的scatter对象 im = ax.scatter(embs[:,0], embs[:,1], edgecolor='k', linewidth=0.2, c=y ) # 获取首次绘图的归一化规则 norm = im.norm # 绘制高亮点,复用归一化规则 ax.scatter(embs[5715][0], embs[5715][1], edgecolor='red', linewidth=0.3, c=y[5715], norm=norm )
方案二:提前手动定义归一化范围
预先基于y数组的全局范围创建归一化对象,两次绘图统一使用该对象:
from matplotlib.colors import Normalize # 基于y的全局范围创建归一化规则 norm = Normalize(vmin=y.min(), vmax=y.max()) # 基础绘图,指定归一化规则 im = ax.scatter(embs[:,0], embs[:,1], edgecolor='k', linewidth=0.2, c=y, norm=norm ) # 绘制高亮点,使用相同的归一化规则 ax.scatter(embs[5715][0], embs[5715][1], edgecolor='red', linewidth=0.3, c=y[5715], norm=norm )
两种方案都能保证两次绘图使用完全一致的颜色映射逻辑,让高亮点的颜色与原图标注的对应颜色匹配,同时红色轮廓可以有效实现高亮效果。
内容的提问来源于stack exchange,提问作者James Arten
相关产品推荐
相关产品推荐

