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

如何用Pandas/Matplotlib连接并列箱线图的25、50、75分位数?

用Pandas/Matplotlib实现横向箱线图分位数连线

完全可以实现,直接在箱线图基础上计算分位数并添加连线即可,步骤和完整代码如下:

1. 生成数据并计算分组分位数

先按分组算出每个组的25%、50%(中位数)、75%分位数,得到规整的分位数数据表:

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

# 生成原始数据
group = np.array([np.random.binomial(2, 0.4) for _ in range(100)])
data = [np.random.uniform(0, 5) for _ in range(len(group))]
df = pd.DataFrame({'data': data, 'group': group})

# 计算每个分组的三个分位数
quantiles_df = df.groupby('group')['data'].quantile([0.25, 0.5, 0.75]).unstack()
# 按分组序号排序,保证绘图顺序正确
quantiles_df = quantiles_df.sort_index()

2. 绘制箱线图+分位数连线

先画出横向箱线图,再在同一个坐标轴上绘制三条分位数连线:

# 绘制横向箱线图,获取坐标轴对象
ax = df.boxplot(by='group', vert=False)

# 箱线图的y轴位置是从1开始的整数,对应每个分组的顺序
y_positions = np.arange(1, len(quantiles_df)+1)

# 分别绘制三条分位数连线,用不同标记和颜色区分
ax.plot(quantiles_df[0.25], y_positions, marker='o', color='#e74c3c', linestyle='-', label='25%分位数')
ax.plot(quantiles_df[0.5], y_positions, marker='s', color='#3498db', linestyle='-', label='中位数')
ax.plot(quantiles_df[0.75], y_positions, marker='^', color='#2ecc71', linestyle='-', label='75%分位数')

# 添加图例、调整标题
ax.legend()
plt.title('横向箱线图与分位数连线')
plt.suptitle('')  # 移除pandas自动生成的顶部标题

plt.show()

关键说明

  • 用groupby+quantile可快速算出每个分组的分位数,unstack把分位数从行转成列,方便后续按列取数绘图。
  • 横向箱线图的y轴位置是连续整数(第一个分组在y=1,第二个在y=2,以此类推),用np.arange直接生成即可对应。
  • 给每条线加上标记点(比如圆形、方形),能更清晰地对应箱线图上的分位数位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:41:30