4

我希望将回归线添加到具有多个数据系列的图中,这些数据系列由一个因子进行颜色编码。使用 brewer.pal 调色板,我创建了一个图,其中数据点按因子 (plant$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)

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

4

1 回答 1

8

或者您使用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计算lm并绘制它的几何图形。因为我们使用color = IDggplot2知道它需要对中的每个唯一 ID 做全图ID

library(ggplot2)
ggplot(plant, aes(x = TL, y = d15N, color = ID)) + 
   geom_point() + geom_smooth(method = "lm")

在此处输入图像描述

于 2013-02-06T12:12:08.867 回答