如何将回归线添加到具有多个数据系列的图中,这些数据系列由一个因子进行颜色编码?

时间:2013-02-06 11:02:18

标签: r plot ggplot2 regression

我希望将回归线添加到具有多个数据系列的图中,这些数据系列由因子进行颜色编码。使用brewer.pal调色板,我创建了一个图表,其数据点由因子(工厂$ ID)着色。以下是代码示例:

palette(brewer.pal(12,"Paired"))
plot(x=plant$TL, y=plant$d15N,  xlab="Total length (mm)", ylab="d15N", col=plant$ID, pch=16)
legend(locator(1), legend=levels(factor(plant$ID)), text.col="black", pch=16, col=c(brewer.pal(12,"Paired")), cex=0.6)

是否有一种简单的方法可以为每个不同的数据系列(因子)添加线性回归线到图表中?我还希望根据因子植物$ ID对线条进行着色?

我可以通过将每个数据系列分别添加到绘图中然后使用abline函数(如下所示)来实现这一点,但是在具有多个数据系列的情况下,匹配颜色可能非常耗时。

plot(y=plant$d15N[plant$ID=="Sm"], x=plant$TL[plant$ID=="Sm"], xlab="Total length (mm)", ylab="d15N", col="green", pch=16, xlim=c(50,300), ylim=c(8,15))
points(y=plant$d15N[plant$ID=="Md"], x=plant$TL[plant$ID=="Md"], type="p", pch=16, col="blue")
points(y=plant$d15N[plant$ID=="Lg"], x=plant$TL[plant$ID=="Lg"], type="p", pch=16, col="orange")
abline(lm(plant$d15N[plant$ID=="Sm"]~plant$TL[plant$ID=="Sm"]), col="green")
abline(lm(plant$d15N[plant$ID=="Md"]~plant$TL[plant$ID=="Md"]), col="blue")
abline(lm(plant$d15N[plant$ID=="Lg"]~plant$TL[plant$ID=="Lg"]), col="orange")
legend.text<-c("Sm","Md","Lg")
legend(locator(1), legend=legend.text, col=c("green", "blue", "orange"), pch=16, bty="n", cex=0.7)

必须有一个更快的方法!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:7)

或者您使用ggplot2并让它完成所有艰苦工作。不幸的是,你的例子是不可复制的,所以我必须自己创建一些:

plant = data.frame(d15N = runif(1000), 
                   TL = runif(1000), 
                   ID = sample(c("Sm","Md","Lg"), size = 1000, replace = TRUE))
plant = within(plant, {
          d15N[ID == "Sm"] = d15N[ID == "Sm"] + 0.5
          d15N[ID == "Lg"] = d15N[ID == "Lg"] - 0.5
  })

> head(plant)
        d15N         TL ID
1  0.6445164 0.14393597 Sm
2  0.2098778 0.62502205 Lg
3 -0.1599300 0.85331376 Lg
4 -0.3173119 0.60537491 Lg
5  0.8197111 0.01176013 Sm
6  1.0374742 0.68668317 Sm

诀窍是使用计算geom_smooth的{​​{1}}几何体并绘制它。由于我们使用lmcolor = ID知道需要为ggplot2中的每个唯一ID执行整个绘图。

ID

enter image description here