如何简洁绘制恒等线周围带等间隔色带的散点图
优化实现方案
可以通过配置化定义色带区间+循环填充的方式大幅简化代码,同时提升复用性,实现代码如下:
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
相关产品推荐
相关产品推荐

