为何散点图中无法按组别显示拟合回归线?
按组别拟合回归线失败的问题解决
我尝试了多种方法,都没法在散点图里按Group组别显示拟合回归线,试了三段代码都没用,最终出图不符合预期。
我的数据
Light.treatment Feeding Group 1 Treatment 1 0.02416667 1 2 Treatment 2 0.01800000 1 3 Treatment 3 0.01400000 1 4 Treatment 4 0.07450000 1 5 Treatment 5 0.00600000 1 6 Treatment 6 0.02740000 1 7 Treatment 1 0.02660000 2 8 Treatment 2 0.04033333 2 9 Treatment 3 0.00850000 2 10 Treatment 4 0.01175000 2 11 Treatment 5 0.03600000 2 12 Treatment 6 0.01550000 2
试过的代码
代码1(无效)
df_algaeconsump %>% ggplot(aes(x=`Light treatment`, y=Feeding)) + stat_smooth(method="loess") + geom_point(aes(colour=Group)) + labs(x="Light Treatment", y="Algae consumption")
代码2(无效)
ggplot(df_algaeconsump, aes(x=`Light treatment`, y=Feeding, color = Group) ) + geom_point() + geom_smooth(method = "lm", alpha = .15, aes(fill = Group))
代码3(无效)
ggplot(subset(df_algaeconsump,Group %in% c("1","2")), aes(x=`Light treatment`, y=Feeding, color=Group)) + geom_point() + geom_smooth(data=subset(df_algaeconsump, Group=="1"), method="lm" , se=FALSE) + geom_smooth(data=subset(df_algaeconsump, Group=="2"), method="lm" , se=FALSE) + xlab("Light Treatment") + ylab('Algae consumption')
问题原因
核心问题是Light treatment是分类变量(字符串类型,Treatment 1到6是不同类别),而线性回归(lm)或loess拟合要求x是连续数值变量。当前每个分组下每个Treatment只有1个数据点,根本没法拟合出回归线。
解决办法
方法1:把Light treatment转成连续数值(推荐)
把Treatment 1-6提取数字转成1-6的数值,这样x变成连续型,就能按Group拟合跨Treatment的回归线:
# 先处理数据:提取Treatment后面的数字转成数值 df_algaeconsump$Light_num <- as.numeric(sub("Treatment ", "", df_algaeconsump$Light.treatment)) # 绘图:按Group分组拟合回归线,x轴标签保留原分类名 ggplot(df_algaeconsump, aes(x=Light_num, y=Feeding, color=Group, fill=Group)) + geom_point(size=3) + geom_smooth(method="lm", alpha=0.15, se=TRUE) + labs(x="Light Treatment", y="Algae consumption") + scale_x_continuous(breaks=1:6, labels=paste("Treatment", 1:6))
方法2:保留分类x轴(仅当有重复数据时有用)
如果后续每个Treatment下每个Group有多个重复数据,可以用这段代码拟合每个组内的趋势,但目前你的数据每个组每个Treatment只有1个点,运行后还是出不了线:
ggplot(df_algaeconsump, aes(x=`Light.treatment`, y=Feeding, color=Group, group=Group)) + geom_point() + geom_smooth(method="lm", se=FALSE)
内容的提问来源于stack exchange,提问作者broccolops
相关产品推荐
相关产品推荐

