Seaborn如何计算其误差线?例:
import numpy as np; np.random.seed(22) import seaborn as sns; sns.set(color_codes=True) x = np.linspace(0, 15, 31) data = np.sin(x) + np.random.rand(10, 31) + np.random.randn(10, 1) ax = sns.tsplot(data=data, err_) plt.show()
如何计算ci_bars(或ci_bands)?
是否可以tsplot
在ci_bars样式中制作绘图,其中误差条或带对应于每个时间点的值的标准偏差?(而不是卑鄙的标准错误或bootstraps)
在Seaborn v0.8.0(2017年7月)中添加了使用误差条显示标准偏差的能力,而不是通过放置ci ="sd"来显示大多数统计函数中的自举置信区间.所以这现在有效
sns.tsplot(data=data, ci="sd")
对于以前的Seaborn版本,绘制标准偏差的解决方法可能是在seaborn tsplot上使用matplotlib错误栏:
import numpy as np; import seaborn as sns; import pandas as pd import matplotlib.pyplot as plt # create a group of time series num_samples = 90 group_size = 10 x = np.linspace(0, 10, num_samples) group = np.sin(x) + np.linspace(0, 2, num_samples) + np.random.rand(group_size, num_samples) + np.random.randn(group_size, 1) df = pd.DataFrame(group.T, index=range(0,num_samples)) # plot time series with seaborn ax = sns.tsplot(data=df.T.values) #, err_) # Add std deviation bars to the previous plot mean = df.mean(axis=1) std = df.std(axis=1) ax.errorbar(df.index, mean, yerr=std, fmt='-o') #fmt=None to plot bars only plt.show()
由于该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_, n_boot=0)
要么
ax = sns.tsplot(data, err_, 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="")
编辑2:由于您询问了如何tsplot
计算其置信区间:它使用自举来估计每个时间点的平均值的分布,然后从这些分布中找到低和高百分位数值(对应于所使用的置信区间).假设正态分布,默认置信区间为68% - 相当于均值的±1标准差.相应的低和高百分位数分别为16%和84%.您可以通过ci
关键字参数更改置信区间.