gpt4 book ai didi

python - 替换已弃用的 tsplot

转载 作者:太空狗 更新时间:2023-10-29 19:35:02 40 4
gpt4 key购买 nike

我有一个时间序列,其中统一样本保存到一个 numpy 数组,我想用自举置信区间绘制它们的平均值。通常,我使用 Seaborn 的 tsplot 来完成此操作。但是,现在是being deprecated .我应该使用什么替代品?

下面是改编自 Seaborn 文档的示例用法:

x = np.linspace(0, 15, 31)
data = np.sin(x) + np.random.rand(10, 31) + np.random.randn(10, 1)
sns.tsplot(data)

注意:这类似于问题“Seaborn tsplot error”和“Multi-line chart with seaborn tsplot”。但是,就我而言,我实际上需要 Seaborn 的置信区间功能,因此不能简单地使用 Matplotlib 而不进行一些笨拙的编码。

最佳答案

问题中的示例 tsplot 可以使用 matplotlib 轻松复制。

使用标准偏差作为误差估计

import numpy as np; np.random.seed(1)
import matplotlib.pyplot as plt
import seaborn as sns

x = np.linspace(0, 15, 31)
data = np.sin(x) + np.random.rand(10, 31) + np.random.randn(10, 1)


fig, (ax,ax2) = plt.subplots(ncols=2, sharey=True)
ax = sns.tsplot(data=data,ax=ax, ci="sd")

def tsplot(ax, data,**kw):
x = np.arange(data.shape[1])
est = np.mean(data, axis=0)
sd = np.std(data, axis=0)
cis = (est - sd, est + sd)
ax.fill_between(x,cis[0],cis[1],alpha=0.2, **kw)
ax.plot(x,est,**kw)
ax.margins(x=0)

tsplot(ax2, data)

ax.set_title("sns.tsplot")
ax2.set_title("custom tsplot")

plt.show()

enter image description here

使用 Bootstrap 进行误差估计

import numpy as np; np.random.seed(1)
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns

x = np.linspace(0, 15, 31)
data = np.sin(x) + np.random.rand(10, 31) + np.random.randn(10, 1)


fig, (ax,ax2) = plt.subplots(ncols=2, sharey=True)
ax = sns.tsplot(data=data,ax=ax)

def bootstrap(data, n_boot=10000, ci=68):
boot_dist = []
for i in range(int(n_boot)):
resampler = np.random.randint(0, data.shape[0], data.shape[0])
sample = data.take(resampler, axis=0)
boot_dist.append(np.mean(sample, axis=0))
b = np.array(boot_dist)
s1 = np.apply_along_axis(stats.scoreatpercentile, 0, b, 50.-ci/2.)
s2 = np.apply_along_axis(stats.scoreatpercentile, 0, b, 50.+ci/2.)
return (s1,s2)

def tsplotboot(ax, data,**kw):
x = np.arange(data.shape[1])
est = np.mean(data, axis=0)
cis = bootstrap(data)
ax.fill_between(x,cis[0],cis[1],alpha=0.2, **kw)
ax.plot(x,est,**kw)
ax.margins(x=0)

tsplotboot(ax2, data)

ax.set_title("sns.tsplot")
ax2.set_title("custom tsplot")

plt.show()

enter image description here


我想这个被弃用的原因恰恰是这个函数的使用相当有限,在大多数情况下你最好直接绘制你想绘制的数据。

关于python - 替换已弃用的 tsplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581672/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com