You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn绘图添加连续colorbar并设置色阶以0为中心的方法咨询

解决方案

实现色图以0为中心可使用matplotlib自带的TwoSlopeNorm(发散型归一化类),同时需同步对齐seaborn散点图和colorbar的归一化规则,避免散点颜色与色阶不匹配。

完整修改后代码

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

y = np.random.normal(30,30,100)
x = np.random.uniform(0,50,100)

# 计算对称色阶范围,保证关于0对齐
vlim = np.abs(y).max()
# 创建以0为中心的发散归一化对象
norm = plt.TwoSlopeNorm(vcenter=0, vmin=-vlim, vmax=vlim)
# 若要固定色阶范围为-80~80,直接替换为下行即可
# norm = plt.TwoSlopeNorm(vcenter=0, vmin=-80, vmax=80)

s = sns.scatterplot(
    y=y,
    x=x,
    hue=y,
    size=y,
    palette='RdBu',
    sizes=(50,50),
    hue_norm=norm # 同步散点的颜色归一化规则
)

sm = plt.cm.ScalarMappable(cmap="RdBu", norm=norm)
sm.set_array([])
s.get_legend().remove()
s.figure.colorbar(sm)
plt.show()

修改说明

  • 替换默认的Normalize为TwoSlopeNorm,指定vcenter=0强制色图中心对齐0值,此时0值刚好对应RdBu色卡的中间白色
  • 动态计算对称的色阶范围vlim = np.abs(y).max(),生成关于0对称的vmin、vmax,符合可接受扩展色阶区间的需求
  • 给scatterplot新增hue_norm=norm参数,保证散点颜色映射规则和后续colorbar完全一致

内容的提问来源于stack exchange,提问作者user2974951

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:15:02