data= np.array([9,13,10,9,13,5,13,9,7,9,13,11]) fig9, ax9 = plt.subplots() ax9.boxplot(data, notch=True)
我得到了奇怪的缺口箱线图。我想使用缺口来突出显示中位数。为什么这个图显示出奇怪的形状?这难道不奇怪吗?
我使用 MacOS 10.14.5 和 python 3.7.2。
出现您所描述的奇怪箱线图缺口的原因,可能与 数据样本量较小 和 Matplotlib 对于缺口计算的方式有关。Matplotlib 使用 近似方法 来绘制缺口,缺口的宽度基于中位数的置信区间估计。当样本量较小时,估计可能会显得不准确,导致缺口看起来非常大甚至不符合直觉。
如果两个缺口不重叠,则表明两组数据的中位数可能有统计显著性差异。
Matplotlib 中缺口的计算:
Matplotlib 使用公式: [ \text{Notch Interval} = \text{Median} \pm 1.57 \times \frac{\text{IQR}}{\sqrt{n}} ]
当数据量较小时,样本的变异性大,导致置信区间宽度可能会被高估。
在您的代码中:
data = np.array([9, 13, 10, 9, 13, 5, 13, 9, 7, 9, 13, 11]) fig9, ax9 = plt.subplots() ax9.boxplot(data, notch=True)
数据分布偏向集中(多个点取值为 9 和 13),但存在一定变异性。
缺口问题:
增加数据量: 如果可能,尝试提供更大的数据集,以减少中位数置信区间的估计误差。
不使用缺口: 如果您不需要显示置信区间,可以通过将 notch=False 来禁用缺口。
notch=False
python ax9.boxplot(data, notch=False)
```python import numpy as np import matplotlib.pyplot as plt
data = np.array([9, 13, 10, 9, 13, 5, 13, 9, 7, 9, 13, 11])
# 计算统计量 median = np.median(data) q1 = np.percentile(data, 25) q3 = np.percentile(data, 75) iqr = q3 - q1 n = len(data)
# 自定义缺口宽度 notch_interval = 1.57 * (iqr / np.sqrt(n)) lower_notch = median - notch_interval upper_notch = median + notch_interval
# 绘制箱线图 fig, ax = plt.subplots() ax.boxplot(data, notch=False) ax.hlines([lower_notch, upper_notch], 0.9, 1.1, colors=’red’, linestyles=’dashed’, label=’Notch CI’) ax.legend() plt.show() ```
bash pip install --upgrade matplotlib
缺口箱线图在样本量较小时可能会出现不直观的结果,因为置信区间估计受到样本数量的限制。如果缺口的形状过于奇怪,可以考虑增加样本量或禁用缺口绘制。