数据可视化有时涉及聚合或估计步骤,其中多个数据点被简化为汇总统计量,例如平均值或中位数。显示汇总统计数据时,通常适合添加误差线,这些误差线提供了有关汇总表示基础数据点的程度的视觉提示。
当给定一个完整的数据集时,几个 seaborn 函数将自动计算汇总统计数据和误差线。本章解释了如何控制误差线显示的内容,以及为什么您可以选择 seaborn 提供的每个选项。
围绕集中趋势估计值的误差线可以显示以下两个一般情况之一:估计值的不确定性范围或基础数据围绕它的分布。这些措施是相关的:在样本量相同的情况下,当数据具有更广泛的分布时,估计值将更加不确定。但随着样本量的增加,不确定性会降低,而传播不会。
在 seaborn 中,有两种方法可以构造每种误差线。一种方法是参数化,使用依赖于分布形状假设的公式。另一种方法是非参数化的,仅使用您提供的数据。
您的选择是使用参数进行的,errorbar
参数存在于作为绘图的一部分进行估计的每个函数中。此参数接受要使用的方法的名称,以及控制间隔大小的参数(可选)。这些选择可以在 2D 分类法中定义,该分类法取决于显示的内容及其构造方式:
您会注意到,对于参数化和非参数化方法,size 参数的定义不同。对于参数误差线,它是一个标量因子,乘以定义误差(标准误差或标准差)的统计量。对于非参数误差线,它是一个百分位数宽度。下面将针对每种特定方法进一步解释这一点。
注意
这里描述的errorbar
API是在seaborn v0.12中引入的。在以前的版本中,唯一的选项是显示引导置信区间或标准偏差,其选择由ci
参数控制(即ci=<size>
或ci="sd"
)。
为了比较不同的参数化,我们将使用以下帮助程序函数:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme()
def plot_errorbars(arg, **kws):
np.random.seed(sum(map(ord, "error_bars")))
x = np.random.normal(0, 1, 100)
f, axs = plt.subplots(2, figsize=(7, 2), sharex=True, layout="tight")
sns.pointplot(x=x, errorbar=arg, **kws, capsize=.3, ax=axs[0])
sns.stripplot(x=x, jitter=.3, ax=axs[1])
plot_errorbars("sd")
plot_errorbars(("pi", 50))
plot_errorbars("se")
plot_errorbars("ci")
seaborn 术语有些具体,因为统计中的置信区间可以是参数的,也可以是非参数的。要绘制参数置信区间,请使用与上述公式类似的公式缩放标准误差。例如,可以通过取平均值 +/- 两个标准误差来构建近似 95% 的置信区间:
plot_errorbars(("se", 2))
非参数自举程序具有与百分位数区间相似的优点:它将自然地适应偏斜和有界数据,这是标准误差区间无法做到的。它也更笼统。虽然标准误差公式特定于平均值,但可以使用任何估计器的引导程序来计算误差线:
plot_errorbars("ci", estimator="median")
引导涉及随机性,每次运行创建错误条的代码时,错误条都会略有不同。有几个参数可以控制这一点。其中一个设置迭代次数(n_boot
):迭代次数越多,生成的时间间隔就越稳定。另一个为随机数生成器设置seed
,这将确保相同的结果:
plot_errorbars("ci", n_boot=5000, seed=10)
plot_errorbars(lambda x: (x.min(), x.max()))