【问题标题】:How to plot several regression lines in same scatter plot in R?如何在R中的同一散点图中绘制几条回归线?
【发布时间】:2014-08-30 08:21:14
【问题描述】:

我有一个数据框,其中包含 体温 (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中,即使在全能的google、youtube教程、R书、R图形书等的帮助下也没有)

我想要的只是为每个总体绘制一条回归线。类似于

【问题讨论】:

  • 第一个建议:继续阅读the tutorial有人在您之前的情节问题中提出的建议,并通过示例进行操作。这将使您在ggplot 路径上的行走更加顺畅。对于当前问题,请参见例如here。也许faceting 性别?
  • @Henrik:感谢按性别分面的想法,我将其添加到我的答案中
  • 感谢编辑(我在哪里可以学习如何正确粘贴表格??)。幸运的是,自从我进入这个网站以来,我一直在不断学习。我一直在阅读 ggplot 材料,但我一直面临编码问题。

标签: r plot regression


【解决方案1】:

使用ggplot2 和geom_smooth 层很容易做到这一点:

library(ggplot2)
ggplot(mydata, aes(x=tb, y=ts, col=pop)) + geom_point() +
            geom_smooth(method="lm", se=FALSE)

如果您也想按性别分开,那么按照@Henrik 的建议,您可能想尝试将它们放在单独的子图中(称为构面):

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 个测量值时,它只绘制了三个点。我是不是做错了什么?
  • 能否请您发布dput(mydata) 的结果以便我可以复制它?
  • 我发现了。事实证明,有几个点是重叠的,这就是为什么它们看起来比实际要少的原因。你知道有什么方法可以将它们稍微向右移动以使它们都出现在情节中吗?我知道在使用“绘图”功能时该怎么做,但我对 ggplot2 很陌生。谢谢!
  • @Maria:“将它们稍微向右移动”是什么意思?如果您将它们全部移动相同的量,它们仍然会重叠。但是,您可以将它们全部移动一个小的随机量(我们称之为抖动),这将使它们可见:您可以通过将geom_point 替换为geom_jitter 来做到这一点。请参阅here 了解更多信息,包括如何调整添加的抖动量。
猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 2013-10-04
  • 2014-09-16
  • 2019-10-22
  • 2021-05-09
  • 1970-01-01
  • 2021-12-14
  • 2017-08-31
相关资源
最近更新 更多