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)

異なるデータ系列(因子)ごとにグラフに線形回帰直線を追加する簡単な方法はありますか?また、factor plant $ 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 に答える