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

如何为散点图设置对角线方向的颜色映射?

实现散点图对角线方向的颜色映射(左下红-对角线黄-右上绿)

你现在的问题出在用x值单独作为颜色映射依据,所以颜色只会沿x轴垂直渐变。要实现你要的对角线效果,核心是改用**x与y的和(x + y)**作为颜色变量——因为左上到右下的对角线满足x + y = 固定值,这样黄色会刚好落在这条对角线上,左下角(x、y都最小,x+y值最小)显示红色,右上角(x、y都最大,x+y值最大)显示绿色。

直接修改代码如下:

x_target = df_target[x_stat]
y_target = df_target[y_stat]
    
x_rest = df_rest[x_stat]
y_rest = df_rest[y_stat]
    
fig, ax = plt.subplots(figsize=(w, h))
            
cmap = mpl.colors.LinearSegmentedColormap.from_list('dyag', ["#e64c4b", "#FFA500", "#64c0b3"], N=256)

# 计算x+y作为颜色映射的核心变量
color_rest = x_rest + y_rest
color_target = x_target + y_target
# 基于所有x+y的值做归一化,保证颜色范围覆盖全部数据
all_color_vals = pd.concat([color_rest, color_target])
norm = plt.Normalize(vmin=all_color_vals.min(), vmax=all_color_vals.max())

# 绘图时把c参数换成x+y的组合值
sc = ax.scatter(x_rest, y_rest, c=color_rest, s=50, cmap=cmap, norm=norm)
sc = ax.scatter(x_target, y_target, c=color_target, s=80, cmap=cmap, norm=norm)
            
fig.set_facecolor('white')
ax.set_facecolor('white') 

ax.set_xlim((x_min_label, x_max_label))
ax.set_ylim((y_min_label, y_max_label))

# 可选:加个颜色条,让颜色对应关系更清晰
fig.colorbar(sc, ax=ax, label='x + y')

额外注意

如果你的x和y轴数值范围差异很大(比如x是0-100,y是0-10),直接求和会导致x主导颜色变化,这时候先把x、y各自归一化到[0,1]区间再求和:

# 归一化x_rest和y_rest
x_r_norm = (x_rest - x_rest.min()) / (x_rest.max() - x_rest.min())
y_r_norm = (y_rest - y_rest.min()) / (y_rest.max() - y_rest.min())
color_rest = x_r_norm + y_r_norm

# 同样处理目标数据
x_t_norm = (x_target - x_target.min()) / (x_target.max() - x_target.min())
y_t_norm = (y_target - y_target.min()) / (y_target.max() - y_target.min())
color_target = x_t_norm + y_t_norm

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:18:13