R 如何用ggplot2绘制三差非线性回归

R 如何用ggplot2绘制三差非线性回归,r,ggplot2,regression,non-linear-regression,R,Ggplot2,Regression,Non Linear Regression,我试图用ggplot2绘制三种不同的非线性回归(就像我在下面的graphpad(虚线)中所做的那样)(因为graphpad无法比较各组之间的非线性回归): 到目前为止,我画了这个图表: 使用以下代码: gp <- ggplot(datapoidsmono, aes(x = time, y = weight)) + stat_summary(aes(color = group), fun.data="mean_sdl", fun.args = list(mult=1), geom="

我试图用ggplot2绘制三种不同的非线性回归(就像我在下面的graphpad(虚线)中所做的那样)(因为graphpad无法比较各组之间的非线性回归):

到目前为止,我画了这个图表:

使用以下代码:

gp <- ggplot(datapoidsmono, aes(x = time, y = weight)) +
  stat_summary(aes(color = group), fun.data="mean_sdl", fun.args = list(mult=1), geom="errorbar", position = "identity", size=0.5, width=0.2) +
  stat_summary(fun.y = "mean", geom = "point", size=3, aes(shape=group,color=group)) + 
  scale_x_discrete(name = "Days after injection") +
  scale_y_continuous(name = "Weight (g)", limits=c(0, 4000), breaks = seq(0, 4000,500)) +
  scale_color_manual(values=c("green", "blue", "red"), name="Treatment", labels=c("A","B","C")) +
  scale_shape_manual(values=c(15,16,17), name  ="Treatment", labels=c("A", "B", "C")) +
  ggtitle("Weight variation over time") + theme(plot.title = element_text(hjust = 0.5)) +
  theme(legend.position = "right") + 
  theme(legend.background = element_rect(size=0.5, linetype="solid", color ="black", fill="white")) +
  theme(axis.line.x = element_line(size = 0.5, color = "black"),axis.text.x = element_text(color="black", size = 12),axis.line.y = element_line(size = 0.5, color = "black"),axis.text.y = element_text(color="black", size = 12),axis.title = element_text(size =15, face="bold"),plot.title = element_text(size =20, face = "bold"),panel.grid.major = element_line(color = "#F1F1F1"),panel.grid.minor = element_blank(), panel.background = element_blank())
这个也没有():

任何想法或线索都有助于继续!谢谢


更新 正如@PoGibas所建议的,我在aes中的第一行中添加了“group=group”,这条线画得很好

我尝试了Multiple解决方案以获得完美贴合:

gp + ggplot(aes(group=group))
  stat_smooth(method = "lm", formula = y ~ x, size = 1, se = FALSE,colour = "black") + 
  stat_smooth(method = "lm", formula = y ~ x + I(x^2),size = 1, se = FALSE, colour = "blue") + 
  stat_smooth(method = "loess", formula = y ~ x, size = 1, se = FALSE, colour = "red") + 
  stat_smooth(method = "gam", formula = y ~ s(x), size = 1, se = FALSE, colour = "green") + 
  stat_smooth(method = "gam", formula = y ~ s(x, k = 3), size = 1, se = FALSE, colour = "violet") +
  stat_smooth(method = "auto", se=F, colour = "yellow")
但我认为简单地
gp+stat\u smooth()
就可以完美地完成这项工作(使用了黄土方法)

现在,我正试图改变外观(虚线)和适合的颜色

我尝试了
gp+stat\u平滑(se=F,aes(fill=group))
但是现在我有了另一个图例框,我的线条总是用相同的颜色

我还尝试在aes中添加
linetype=group
,但当我使用
scale\u linetype\u手册(值=c(“虚线”、“虚线”、“虚线”)
时,每一行都是虚线(包括错误条)

完整的代码是:

ggplot(datapoidsmono, aes(x = time, y = weight, group=group, linetype=group)) +
  stat_summary(aes(color = group), fun.data="mean_sdl", fun.args = list(mult=1), geom="errorbar", position = "identity", size=0.5, width=0.2) +
  stat_summary(fun.y = "mean", geom = "point", size=3, aes(shape=group,color=group)) + 
  scale_x_discrete(name = "Days after injection") +
  scale_y_continuous(name = "Weight (g)", limits=c(0, 4000), breaks = seq(0, 4000,500)) +
  scale_color_manual(values=c("green", "blue", "red"), name="Treatment", labels=c("A","B","C")) +
  scale_shape_manual(values=c(15,16,17), name  ="Treatment", labels=c("A", "B", "C")) +
  ggtitle("Weight variation over time") + theme(plot.title = element_text(hjust = 0.5)) +
  theme(legend.position = "right") + 
  theme(legend.background = element_rect(size=0.5, linetype="solid", color ="black", fill="white")) +
  theme(axis.line.x = element_line(size = 0.5, color = "black"),axis.text.x = element_text(color="black", size = 12),axis.line.y = element_line(size = 0.5, color = "black"),axis.text.y = element_text(color="black", size = 12),axis.title = element_text(size =15, face="bold"),plot.title = element_text(size =20, face = "bold"),panel.grid.major = element_line(color = "#F1F1F1"),panel.grid.minor = element_blank(), panel.background = element_blank()) +
  stat_smooth(se=F, aes(fill = group)) +
  scale_linetype_manual(values=c("dotted", "dotted", "dotted"))
感谢@PoGibas,我补充道
group=group,color=group
在ggplot的aes中,它给了我一个很好的结果

ggplot(datapoidsmono, aes(x = time, y = weight, group=group, color=group)) +
  stat_summary(aes(color = group), fun.data="mean_sdl", fun.args = list(mult=1), geom="errorbar", position = "identity", size=0.5, width=0.2) +
  stat_summary(fun.y = "mean", geom = "point", size=3, aes(shape=group,color=group)) + 
  scale_x_discrete(name = "Days after injection") +
  scale_y_continuous(name = "Weight (g)", limits=c(0, 4000), breaks = seq(0, 4000,500)) +
  scale_color_manual(values=c("green", "blue", "red"), name="Treatment", labels=c("A","B","C")) +
  scale_shape_manual(values=c(15,16,17), name  ="Treatment", labels=c("A", "B", "C")) +
  ggtitle("Weight variation over time") + theme(plot.title = element_text(hjust = 0.5)) +
  theme(legend.position = "right") + 
  theme(legend.background = element_rect(size=0.5, linetype="solid", color ="black", fill="white")) +
  theme(axis.line.x = element_line(size = 0.5, color = "black"),axis.text.x = element_text(color="black", size = 12),axis.line.y = element_line(size = 0.5, color = "black"),axis.text.y = element_text(color="black", size = 12),axis.title = element_text(size =15, face="bold"),plot.title = element_text(size =20, face = "bold"),panel.grid.major = element_line(color = "#F1F1F1"),panel.grid.minor = element_blank(), panel.background = element_blank()) +
  stat_smooth(se=F, linetype="dotted")
这是最后一张图表:

注:graphpad(见第一张图)提出的拟合比我最终选择的(黄土)拟合更平滑(method=“lm”,formula=y~x+I(x^2),size=1,se=FALSE),

,多亏了@PoGibas,我补充道
group=group,color=group
在ggplot的aes中,它给了我一个很好的结果

ggplot(datapoidsmono, aes(x = time, y = weight, group=group, color=group)) +
  stat_summary(aes(color = group), fun.data="mean_sdl", fun.args = list(mult=1), geom="errorbar", position = "identity", size=0.5, width=0.2) +
  stat_summary(fun.y = "mean", geom = "point", size=3, aes(shape=group,color=group)) + 
  scale_x_discrete(name = "Days after injection") +
  scale_y_continuous(name = "Weight (g)", limits=c(0, 4000), breaks = seq(0, 4000,500)) +
  scale_color_manual(values=c("green", "blue", "red"), name="Treatment", labels=c("A","B","C")) +
  scale_shape_manual(values=c(15,16,17), name  ="Treatment", labels=c("A", "B", "C")) +
  ggtitle("Weight variation over time") + theme(plot.title = element_text(hjust = 0.5)) +
  theme(legend.position = "right") + 
  theme(legend.background = element_rect(size=0.5, linetype="solid", color ="black", fill="white")) +
  theme(axis.line.x = element_line(size = 0.5, color = "black"),axis.text.x = element_text(color="black", size = 12),axis.line.y = element_line(size = 0.5, color = "black"),axis.text.y = element_text(color="black", size = 12),axis.title = element_text(size =15, face="bold"),plot.title = element_text(size =20, face = "bold"),panel.grid.major = element_line(color = "#F1F1F1"),panel.grid.minor = element_blank(), panel.background = element_blank()) +
  stat_smooth(se=F, linetype="dotted")
这是最后一张图表:


注:graphpad提出的拟合(见第一张图)比我最终选择的拟合(黄土)更为平滑(method=“lm”,formula=y~x+I(x^2),size=1,se=FALSE),
time

是一个连续变量吗?检查
class(datapoidmono$time)
[1]“因子”
我必须在main
aes
中转换因子以绘制绘图(见第一篇文章)
datapoidsmono$time Add
group=group
它将完成这一任务。
ggplot(datapoidsmono,aes(时间、重量、颜色=组、组=组))+
谢谢!的确,这是一个多么棘手的把戏!我自己不会发现的!我已经用实际的改进更新了第一篇帖子:)时间是一个连续变量吗?检查
class(datapoidsmono$time)
[1]“factor”
为了绘制绘图,我必须在factor中进行变换(见第一篇文章)
datapoidsmono$time在main
aes
中添加
group=group
,这样就可以了<代码>ggplot(数据点菜单,aes(时间,重量,颜色=组,组=组))+
谢谢!的确,这是一个多么狡猾的把戏!我自己也找不到!我已经用实际的改进更新了第一篇帖子:)
ggplot(datapoidsmono, aes(x = time, y = weight, group=group, color=group)) +
  stat_summary(aes(color = group), fun.data="mean_sdl", fun.args = list(mult=1), geom="errorbar", position = "identity", size=0.5, width=0.2) +
  stat_summary(fun.y = "mean", geom = "point", size=3, aes(shape=group,color=group)) + 
  scale_x_discrete(name = "Days after injection") +
  scale_y_continuous(name = "Weight (g)", limits=c(0, 4000), breaks = seq(0, 4000,500)) +
  scale_color_manual(values=c("green", "blue", "red"), name="Treatment", labels=c("A","B","C")) +
  scale_shape_manual(values=c(15,16,17), name  ="Treatment", labels=c("A", "B", "C")) +
  ggtitle("Weight variation over time") + theme(plot.title = element_text(hjust = 0.5)) +
  theme(legend.position = "right") + 
  theme(legend.background = element_rect(size=0.5, linetype="solid", color ="black", fill="white")) +
  theme(axis.line.x = element_line(size = 0.5, color = "black"),axis.text.x = element_text(color="black", size = 12),axis.line.y = element_line(size = 0.5, color = "black"),axis.text.y = element_text(color="black", size = 12),axis.title = element_text(size =15, face="bold"),plot.title = element_text(size =20, face = "bold"),panel.grid.major = element_line(color = "#F1F1F1"),panel.grid.minor = element_blank(), panel.background = element_blank()) +
  stat_smooth(se=F, linetype="dotted")