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

Python中为散点图添加基于中位数距离的背景Colormap

实现带平滑背景色图的散点/折线图

要实现你需要的效果,我们可以通过创建高分辨率的背景网格,基于每个点与中位数的偏离程度映射颜色,再叠加原有的数据图。以下是完整的实现代码:

import numpy as np
import matplotlib.pyplot as plt

# 原始数据
x = np.arange(0,11)
y = [3.03533424, 3.22326981, 3.05219723, 4.5, 3.21876807, 3.14124761, 3.43615915, 3.21650377, 3.2924148 , 3.30075672, 5.7]
median_y = np.median(y)

# 创建高分辨率的网格(分辨率远高于原始数据点)
x_highres = np.linspace(x.min(), x.max(), 200)  # x轴200个点
y_highres = np.linspace(min(y) - 0.5, max(y) + 0.5, 200)  # y轴扩展范围并设200个点
X, Y = np.meshgrid(x_highres, y_highres)

# 计算每个网格点到中位数的偏离程度(绝对值,偏离越远值越大)
deviation = np.abs(Y - median_y)

# 创建画布
fig, ax = plt.subplots(figsize=(10,6))

# 绘制背景色图(zorder设为0,确保在最底层)
pcm = ax.pcolormesh(X, Y, deviation, cmap='RdYlBu_r', alpha=0.3, zorder=0)

# 叠加原始折线和散点
ax.plot(x, y, marker='o', color='k', linewidth=2, zorder=2)
# 绘制中位数线
ax.axhline(median_y, color='blue', label='Median', linewidth=2, zorder=1)

# 添加颜色条,标注偏离程度
cbar = plt.colorbar(pcm)
cbar.set_label('Deviation from Median', fontsize=12)

# 设置图表标签
ax.set_xlabel('X', fontsize=12)
ax.set_ylabel('Y', fontsize=12)
ax.set_title('Parameter Performance vs Deviation from Median', fontsize=14)
ax.legend()

plt.show()

关键细节说明:

  • 高分辨率网格:用np.linspace生成远多于原始数据点的密集网格(这里设为200个点),保证背景色图的平滑效果。
  • 偏离度计算:用np.abs(Y - median_y)衡量每个点与中位数的距离,距离越大,颜色越深,直观体现"偏离越远表现越差"的趋势。
  • 配色方案:使用RdYlBu_r(反向的红-黄-蓝配色),中位数附近颜色最浅,偏离越远颜色越深;你可以替换成其他配色,比如viridis_r、coolwarm等。
  • 层级控制:通过zorder参数确保背景色图在最底层(zorder=0),中位数线在中间(zorder=1),原始数据图在最上层(zorder=2),避免遮挡。
  • alpha参数:设置背景色图的透明度,让前景数据更清晰可见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:55:32