在带有 seaborn 的 Facetgrid 上将 regplot 与分段线性回归相结合
Combining regplot with piecewise linear regression on a Facetgrid with seaborn
我想在网格上绘制我的数据以及相关的误差条和通过每个时间点的平均值的分段线性回归。我的数据在 pandas 数据框中,希望我们 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)
但请注意,我的 x 轴未正确缩放(这是有道理的,因为因子图是为分类比较而设计的)
如果我改为创建 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
问题来了:
如何绘制图中各点之间的分段线性回归?
谢谢,
在网上搜索并阅读了 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()
working output
我想在网格上绘制我的数据以及相关的误差条和通过每个时间点的平均值的分段线性回归。我的数据在 pandas 数据框中,希望我们 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)
但请注意,我的 x 轴未正确缩放(这是有道理的,因为因子图是为分类比较而设计的)
如果我改为创建 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
问题来了: 如何绘制图中各点之间的分段线性回归?
谢谢,
在网上搜索并阅读了 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()
working output