2015-12-30 4 views
5

ggplot2を使用してファセットプロットを作成する場合、グループ化パラメータも指定すると、各ファセットで個々のラベルを取得できません。 group = ...を指定しないと問題なく動作しますが、治療前と治療後の変更を重視したペアデータのプロットを作成しようとしています。ここでグループ指定時にggplot2でfacet_wrapを使用したgeom_text

は一例です:

library(tidyr) 
library(ggplot2) 

set.seed(253) 
data <- data.frame(Subject = LETTERS[1:10], 
        Day1.CompoundA = rnorm(10, 4, 2), 
        Day2.CompoundA = rnorm(10, 7, 2), 
        Day1.CompoundB = rnorm(10, 5, 2), 
        Day2.CompoundB = rnorm(10, 5.5, 2)) 

# Compare concentration of compounds by day 
A <- t.test(data$Day1.CompoundA, data$Day2.CompoundA, paired = TRUE) 
B <- t.test(data$Day1.CompoundB, data$Day2.CompoundB, paired = TRUE) 

data.long <- gather(data, key = DayCompound, value = Concentration, -Subject) %>% 
     separate(DayCompound, c("Day", "Compound")) 

# text to annotate graphs 
graphLabels <- data.frame(Compound = c("CompoundA", "CompoundB"), 
          Pval = paste("p =", c(signif(A$p.value, 2), 
               signif(B$p.value, 2)))) 

[OK]を、今すぐデータが設定されていることを、私はちょうど罰金箱ひげ図を作成することができます

ggplot(data.long, aes(x = Day, y = Concentration)) + 
     geom_boxplot() + 
     facet_wrap(~ Compound) + 
     geom_text(data = graphLabels, aes(x = 1.5, y = 10, label = Pval)) 

boxplot example

しかし、私が欲しい場合各対象を異なる色で表示することによってデータのペアの性質を強調した線のプロットを表示するには、ファセットのラベルが機能しません。

ggplot(data.long, aes(x = Day, y = Concentration, color = Subject, group = Subject)) + 
     geom_point() + geom_line() + 
     facet_wrap(~ Compound) + 
     geom_text(data = graphLabels, aes(x = 1.5, y = 10, label = Pval)) 

# Error in eval(expr, envir, enclos) : object 'Subject' not found 

いずれかの提案がありますか?

答えて

8

最上位レベルのggplot()コールで美学(つまり、aes(...,color = Subject))をマッピングすると、これらのマッピングが各レイヤに渡されます。つまり、各レイヤでデータにこれらの名前の変数があることが必要です。

あなたはどちらかは、それぞれの層に分けてデータとのマッピングを指定するか、明示的マッピングを解除する必要があります。

ggplot(data.long, aes(x = Day, y = Concentration, color = Subject, group = Subject)) + 
    geom_point() + geom_line() + 
    facet_wrap(~ Compound) + 
    geom_text(data = graphLabels, aes(x = 1.5, y = 10, label = Pval,color = NULL,group= NULL)) 

あなたがしたくないいずれの層にFALSEに設定することができますinherit.aes引数もありますそれらの他のマッピングを引き込みます。

ggplot(data.long, aes(x = Day, y = Concentration, color = Subject, group = Subject)) + 
    geom_point() + geom_line() + 
    facet_wrap(~ Compound) + 
    geom_text(data = graphLabels, aes(x = 1.5, y = 10, label = Pval),inherit.aes = FALSE) 
+0

ありがとうございました!それは美しく働いた! – LauraS

関連する問題