web-dev-qa-db-ja.com

ファセットに異なる線を追加する方法

2つの異なる種の単一培養と混合培養の成長の違いを調べたデータがあります。さらに、データを明確にするためにグラフを作成しました。

誤差範囲を含むバープロットが必要です。データセット全体はもちろん大きくなりますが、このグラフではバープロットの平均値を持つdata.frameです。

plant           species     means
Mixed culture   Elytrigia   0.886625
Monoculture     Elytrigia   1.022667
Monoculture     Festuca     0.314375
Mixed culture   Festuca     0.078125

このデータを使用して、ggplot2でグラフを作成しました。plantはx軸に、meansはy軸にあり、ファセットを使用して種を分割しました。

これは私のコードです:

    limits <- aes(ymax = meansS$means + eS$se, ymin=meansS$means - eS$se)
    dodge <- position_dodge(width=0.9)

    myplot <- ggplot(data=meansS, aes(x=plant, y=means, fill=plant)) + facet_grid(. ~ species) 
    myplot <- myplot + geom_bar(position=dodge) + geom_errorbar(limits, position=dodge, width=0.25)
    myplot <- myplot + scale_fill_manual(values=c("#6495ED","#FF7F50"))
    myplot <- myplot + labs(x = "Plant treatment", y = "Shoot biomass (gr)")  
    myplot <- myplot + opts(title="Plant competition")
    myplot <- myplot + opts(legend.position = "none")
    myplot <- myplot + opts(panel.grid.minor=theme_blank(), panel.grid.major=theme_blank())

今のところ大丈夫です。ただし、2つのファセットに2つの異なる水平線を追加します。そのために、私はこのコードを使用しました:

    hline.data <- data.frame(z = c(0.511,0.157), species = c("Elytrigia","Festuca")) 
    myplot <- myplot + geom_hline(aes(yintercept = z), hline.data)

しかし、それを行うと、2つの余分なファセットがあり、2つの水平線がプロットされるプロットが得られます。代わりに、2つの新しいファセットを作成するのではなく、水平線をバーのあるファセットにプロットします。誰もこれを解決する方法を考えています。

今作成したグラフを置くと、より明確になると思います:

enter image description here

38
Marinka

変数の種類が両方のデータセットで同一であることを確認してください。それがそれらの1つの要因である場合、それは他の要因でもなければなりません

library(ggplot2)
dummy1 <- expand.grid(X = factor(c("A", "B")), Y = rnorm(10))
dummy1$D <- rnorm(nrow(dummy1))
dummy2 <- data.frame(X = c("A", "B"), Z = c(1, 0))
ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) + 
    geom_hline(data = dummy2, aes(yintercept = Z))

enter image description here

dummy2$X <- factor(dummy2$X)
ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) + 
    geom_hline(data = dummy2, aes(yintercept = Z))

enter image description here

60
Thierry