如何为散点图设置对角线方向的颜色映射?
实现散点图对角线方向的颜色映射(左下红-对角线黄-右上绿)
你现在的问题出在用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
相关产品推荐
相关产品推荐

