使用中位数而不是均值的Seaborn线图

Chr*_*ris 3 matplotlib median seaborn

seaborn.lineplot()用来创建这样的折线图(代表均值的线,由代表std的带包围):

sns.lineplot(x="trial", y="rvalues", hue="subject", err_style="band", ci='sd', data=df)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我唯一的问题是,由于我的数据不是高斯数据,因此我更关心中位数而不是均值。在Seaborn中该怎么做?

还是有类似的工具可以?我知道我可以在matplotlib中从头开始做,但是要使它变得如此好,需要大量的工作。

Cha*_* Ye 9

estimator 应该是熊猫方法。

使用estimator=np.median代替estimator="median"

sns.lineplot(x="trial", y="rvalues", hue="subject", err_style="band",
             ci='sd',
             estimator=np.median,
             data=df)
Run Code Online (Sandbox Code Playgroud)


Imp*_*est 3

sns.lineplot

estimatorpandas 方法的名称或可调用或无,可选
方法,用于聚合同一 x 级别的 y 变量的多个观察值。如果没有,则将绘制所有观察结果。

data: datapandas.DataFramenumpy.ndarray、 映射或序列

因此,请尝试以下操作,其中ci='sd'必须指定。

sns.lineplot(x="trial", y="rvalues", hue="subject", err_style="band", 
             ci='sd', estimator="median", data=df)
Run Code Online (Sandbox Code Playgroud)

如果不使用ci='sd',则estimator应该是numpy方法调用,而不是字符串。

  • 测试于python 3.10, pandas 1.4.3, matplotlib 3.5.1,seaborn 0.11.2
sns.lineplot(x="trial", y="rvalues", hue="subject", err_style="band", 
             ci='sd', estimator="median", data=df)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述