如何在R中绘制同一散点图中的多条回归线?

3
我有一个数据框,其中包含多个来自三个不同种群的个体的体温(Tb)基质温度(Ts)数据,这些个体既包括男性也包括女性。(由于我无法分享完整的表格,所以我编写了这个表格。但我每个种群大约有30个个体。)
pop  sex  tb  ts
bo    m     37   30
bo    m     39   29
bo    f     36   36
pa    m     40   34
pa    f     37   28
pa    m     37   33
pa    f     36   26
re    f     35   24
re    f     37   29
re    m     38   30

我希望评估Tb和Ts之间的关系,不仅针对物种,而是针对每个种群分别进行评估,以确定它们之间斜率可能存在的差异。

my.regression <- lm(tb ~ ts*pop*sex, data = mydata)

我成功绘制了一个散点图,每个人群用不同的颜色表示。然而,我无法绘制回归线。我在各处寻找答案:如何按组添加回归线...(在stackoverflow上没有,在万能的谷歌、Youtube教程、R书籍、R图形书籍等等中也没有)。
我想要的只是通过每个人口绘制一条回归线。类似于这个图像:this plot

1
第一条建议:继续阅读之前在你的绘图问题中有人建议的教程,并且通过实例进行学习。这将使你在ggplot路径上的步伐更加流畅。对于当前的问题,可以参考这里。也许可以按性别进行分面处理? - Henrik
@Henrik:感谢您提出按性别分面的想法,我已将其添加到我的答案中。 - David Robinson
感谢修改(我可以在哪里学习如何正确粘贴表格??)。自从我进入这个网站以来,我一直在持续学习中。我一直在阅读ggplot材料,但我仍然面临编码问题。 - Maria
1个回答

3
这很容易使用ggplot2geom_smooth层实现:
library(ggplot2)
ggplot(mydata, aes(x=tb, y=ts, col=pop)) + geom_point() +
            geom_smooth(method="lm", se=FALSE)

如果您想按性别分开,建议采用@Henrik提出的方法,将它们放在不同的子图中(称为facets):

ggplot(mydata, aes(tb, ts, col=pop)) + geom_point() +
             geom_smooth(method="lm", se=FALSE) + facet_wrap(~ sex)

另外一种方法是可以同时绘制两个图,但使用实线或虚线来区分性别:

ggplot(mydata, aes(tb, ts, col=pop, lty=sex)) + geom_point() +
             geom_smooth(method="lm", se=FALSE)

第一个选项对我非常有帮助。但是,该图存在一些奇怪的问题。它似乎没有绘制所有的值。当我指定“shape = pop”时,我发现其中一个群体只绘制了三个点,而我知道该群体至少有30个测量值。我做错了什么吗? - Maria
请您能否发布 dput(mydata) 的结果,这样我就可以复现它了吗? - David Robinson
我找到了原因。原来有几个点是重叠的,这就是为什么它们看起来比实际少。 你知道有什么方法可以将它们稍微向右移动,以便在图中全部显示吗? 当使用函数“plot”时,我知道如何做到这一点,但我对ggplot2非常陌生。谢谢! - Maria
@Maria: 你说的“稍微向右移动”是什么意思?如果你把它们都移动同样的距离,它们仍然会重叠。但是,你可以把它们都随机地移动一小段距离(我们称之为jitter),这样它们就能被看到:你可以用geom_jitter替换geom_point来实现这一点。请参见这里获取更多信息,包括如何调整添加的jitter量。 - David Robinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接