Plotly:如何为已生成的散点图添加四分位距(IQR)区域
Plotly散点图添加四分位距(IQR)实现方案
核心实现逻辑
先计算对应维度的四分位数值,再通过矩形图层绘制IQR区域,叠加中位数参考线,通过图层层级参数避免遮挡散点数据。
完整可运行示例代码
import plotly.express as px import numpy as np import pandas as pd # 生成测试数据,可替换为自有数据集 df = pd.DataFrame({ 'x': np.random.normal(loc=50, scale=10, size=200), 'y': np.random.normal(loc=30, scale=8, size=200) }) # 计算x轴相关统计值 q1_x = np.quantile(df['x'], 0.25) q3_x = np.quantile(df['x'], 0.75) median_x = np.quantile(df['x'], 0.5) # 计算y轴相关统计值 q1_y = np.quantile(df['y'], 0.25) q3_y = np.quantile(df['y'], 0.75) median_y = np.quantile(df['y'], 0.5) # 初始化散点图 fig = px.scatter(df, x='x', y='y', title='带IQR区域与中位数参考线的散点图') # 添加x轴IQR矩形区域 fig.add_vrect( x0=q1_x, x1=q3_x, fillcolor="lightblue", opacity=0.2, layer="below", line_width=0, name="X轴IQR" ) # 添加y轴IQR矩形区域 fig.add_hrect( y0=q1_y, y1=q3_y, fillcolor="lightgreen", opacity=0.2, layer="below", line_width=0, name="Y轴IQR" ) # 添加中位数参考线 fig.add_vline(x=median_x, line_width=2, line_dash="dash", line_color="blue", name="X中位数") fig.add_hline(y=median_y, line_width=2, line_dash="dash", line_color="green", name="Y中位数") # 输出图表 fig.show()
关键参数说明
layer="below":将IQR矩形置于散点图层下方,避免遮挡原始数据opacity=0.2:设置合理透明度,兼顾区域辨识度与数据可见性line_width=0:去掉矩形默认边框,避免多余线条干扰图表展示line_dash="dash":将中位数参考线设置为虚线,和IQR区域形成视觉区分
分组散点图适配方案
如果是带分组维度的散点图,按分组循环计算对应统计值后逐一添加元素即可:
# 按category字段分组示例 group_colors = px.colors.qualitative.Plotly for idx, group in enumerate(df['category'].unique()): group_df = df[df['category'] == group] # 计算当前分组的统计值 q1_x = np.quantile(group_df['x'], 0.25) q3_x = np.quantile(group_df['x'], 0.75) median_x = np.quantile(group_df['x'], 0.5) # 添加对应区域与参考线,不同分组用不同颜色区分 fig.add_vrect(x0=q1_x, x1=q3_x, fillcolor=group_colors[idx], opacity=0.15, layer="below", line_width=0) fig.add_vline(x=median_x, line_width=2, line_dash="dash", line_color=group_colors[idx])
内容的提问来源于stack exchange,提问作者shaik moeed
相关产品推荐
相关产品推荐

