您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python中seaborn tsplot函数中的标准偏差和误差线[

Python中seaborn tsplot函数中的标准偏差和误差线[

由于该tsplot函数无法直接设置误差线值或更改用于计算误差线的方法,因此,我发现的唯一解决方案是对timeseries模块进行猴子修补:

import seaborn.timeseries

def _plot_std_bars(*args, central_data=None, ci=None, data=None, **kwargs):
    std = data.std(axis=0)
    ci = np.asarray((central_data - std, central_data + std))
    kwargs.update({"central_data": central_data, "ci": ci, "data": data})
    seaborn.timeseries._plot_ci_bars(*args, **kwargs)

def _plot_std_band(*args, central_data=None, ci=None, data=None, **kwargs):
    std = data.std(axis=0)
    ci = np.asarray((central_data - std, central_data + std))
    kwargs.update({"central_data": central_data, "ci": ci, "data": data})
    seaborn.timeseries._plot_ci_band(*args, **kwargs)

seaborn.timeseries._plot_std_bars = _plot_std_bars
seaborn.timeseries._plot_std_band = _plot_std_band

然后,使用标准偏差误差线进行绘制

ax = sns.tsplot(data, err_style="std_bars", n_boot=0)

要么

ax = sns.tsplot(data, err_style="std_band", n_boot=0)

用标准偏差带绘制。

编辑:受SO上此答案的启发,另一种(可能更明智的)方法将是使用以下内容代替tsplot:

import pandas as pd
import seaborn as sns

df = pd.DataFrame.from_dict({
    "mean": data.mean(axis=0),
    "std": data.std(axis=0)
}).reset_index()

g = sns.FacetGrid(df, size=6)
ax = g.map(plt.errorbar, "index", "mean", "std")
ax.set(xlabel="", ylabel="")

Edit2:既然您询问如何tsplot计算其置信区间:它使用自举法来估计每个时间点的平均值分布,然后从这些分布中找到上下百分比值(与所使用的置信区间相对应)。认的置信区间为68%–假设正态分布,等于平均值??的±一个标准偏差。低百分比和高百分比分别为16%和84%。您可以通过ci关键字参数更改置信区间。

python 2022/1/1 18:28:55 有202人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶