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

如何简洁绘制恒等线周围带等间隔色带的散点图

优化实现方案

可以通过配置化定义色带区间+循环填充的方式大幅简化代码,同时提升复用性,实现代码如下:

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

# 可自定义配置:色带区间(相对于恒等线的偏移上下限)、对应颜色、透明度
BAND_CONFIG = [
    (0, 1, 'green', 0.3),
    (1, 5, 'indianred', 0.3),
    (5, 10, 'maroon', 0.3)
]

# 生成测试数据
np.random.seed(42) # 固定随机种子方便复现
measure_1 = np.random.normal(loc=75, scale=10, size=200)
measure_2 = measure_1 + np.random.normal(loc=0, scale=2, size=200)
df = pd.DataFrame(data=np.vstack((measure_1, measure_2)).T, columns=["V1", "V2"])

# 绘图
ax = plt.gca()
sns.scatterplot(ax=ax, x=df['V1'], y=df['V2'], alpha=0.5)

# 只生成一次恒等线序列
x_range = np.linspace(df['V1'].min(), df['V1'].max(), num=1000)
y_identity = x_range
ax.plot(x_range, y_identity)

# 循环填充色带,自动处理上下对称区间
for low_offset, high_offset, color, alpha in BAND_CONFIG:
    # 填充恒等线上方区间
    ax.fill_between(x_range, 
                    y_identity + low_offset, 
                    y_identity + high_offset, 
                    color=color, alpha=alpha)
    # 填充恒等线下方区间
    ax.fill_between(x_range, 
                    y_identity - low_offset, 
                    y_identity - high_offset, 
                    color=color, alpha=alpha)

plt.show()

如果需要调整区间范围、颜色、透明度,只需要修改BAND_CONFIG配置即可,不需要修改核心逻辑,也可以把这部分逻辑封装成独立函数,在多个绘图场景下直接调用。如果确实要使用pcolormesh实现也可以,但对于这种和恒等线平行的规则区间,上述循环填充的方式可读性和性能都更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:54:02