python中如何在箱线图上标注出分位数
时间: 2024-09-17 14:03:17 浏览: 34
在Python中,我们可以使用matplotlib库创建箱线图并在图上添加分位数的文字标签。下面是一个简单的例子,展示了如何做这个操作:
```python
import matplotlib.pyplot as plt
import numpy as np
# 假设我们有一组随机数据
data = np.random.randn(100)
# 创建箱线图
fig, ax = plt.subplots()
bplot = ax.boxplot(data, positions=[1], notch=True, patch_artist=True,
labels=['Data'])
# 设置每个箱子的宽度为0.6
width = 0.6
# 添加分位数的文本标签
for i in range(1, len(bplot['boxes']) + 1):
q1, med, q3 = bplot['boxes'][i - 1].get_ydata()
lower_wisker, upper_wisker = bplot['whiskers'][i - 1].get_ydata()
# 标注第一四分位数(Q1)
ax.annotate(f"Q1={q1:.2f}", xy=(1, q1), ha='center', va='bottom',
xytext=(-2 * width, 0), textcoords="offset points")
# 标注中位数(Med)
ax.annotate("Med", xy=(1, med), ha='center', va='bottom',
xytext=(0, 4), textcoords="offset points")
# 标注第三四分位数(Q3)
ax.annotate(f"Q3={q3:.2f}", xy=(1, q3), ha='center', va='bottom',
xytext=(2 * width, 0), textcoords="offset points")
# 标注上限和下限
ax.annotate(f"{lower_wisker:.2f}~{upper_wisker:.2f}", xy=(1, (q3 + lower_wisker) / 2),
xytext=(4, 8), textcoords="offset points",
horizontalalignment="right", verticalalignment="bottom")
plt.xlabel('Groups')
plt.ylabel('Values')
plt.show()
```
在这个示例中,`annotate`函数用于在特定的位置添加文字标签。`positions`参数确定了箱体在x轴上的位置。
阅读全文