我想在网格上绘制我的数据以及相关的错误栏,并通过每个时间点的平均值进行分段线性回归。我在熊猫数据框中有我的数据,并希望我们seaborn做这项工作。
如果我使用seaborns factorplot,我会接近。
g = sns.factorplot(x="Time", y='value', hue="Name",
col="PEAK", data=meltdf,
size=4, aspect=1.0,col_wrap=3,sharey=False,scale=0.7)
但请注意我的xaxis没有正确缩放(这是有道理的,因为factorplot是为分类比较而设计的)
如果我改为创建一个FacetGrid并将regplot和plt.plot映射到网格上,我会在x轴上得到正确的间距并保留误差条等但是线性回归不是我想要的方式
meltdf = pd.melt(Conc_norm.drop(['GLC','pan','Ratio %'],axis=1),
id_vars=['Name','Time'], var_name='PEAK')
g = sns.FacetGrid(meltdf, col="PEAK",hue='Name', col_wrap=4,sharey=False)
g.map(sns.regplot, "Time", "value",fit_reg=False, x_estimator=np.mean);
g.map(plt.plot, "Time", "value");
output for the Facetgrid mapped with regplot and plt.plot
现在问题是: 如何绘制图中各点之间的分段线性回归?
谢谢,
答案 0 :(得分:1)
在浏览网络并阅读mwaskom的许多优秀答案之后,似乎我找到了一个有效的解决方案
def _plotmean(x, *args, **kwargs):
ax = plt.gca()
data = kwargs.pop('data')
data = data.groupby(x).mean()
data.plot(ax=ax, **kwargs)
Conc_norm.sort_values('Time', inplace=True)
meltdf = pd.melt(Conc_norm.drop(['GLC','pan','Ratio %'], axis=1),
id_vars=['Name','Time'], var_name='PEAK')
g = sns.FacetGrid(meltdf, col="PEAK", hue='Name', col_wrap=3,sharey=False)
g.map(sns.regplot, "Time", "value", fit_reg=False, x_estimator=np.mean)
g.map_dataframe(_plotmean, "Time")
g.add_legend()