如何为R上的每个构面(条形图)注释不同的值?

时间:2017-07-17 05:29:36

标签: r ggplot2 annotations bar-chart facet

我想知道如何在条形图中注释每个方面。现在,我使用了geom_signif函数,该函数完美地工作,除了它将一个facet上的注释复制到另一个facet上。

我的代码是这样的:

geom_signif(annotation = c("p=0.01"),
            y_position = c(9), xmin = c(2), xmax = c(3))

我的条形图:

enter image description here

请指教。我在这里阅读了一些类似的解决方案,尝试了其他一些方法,但我似乎仍然无法弄明白。这是迄今为止我所得到的最接近和最简单的解决方案,除了我想要2个不同的注释(在这种情况下标记p值 - 我单独运行ANOVA)在方面。

1 个答案:

答案 0 :(得分:1)

以下是通过手动解构绘图并使用新注释重建来执行此操作的示例。我理解它,因为你想要每个情节的手动文本注释。这个(非常手动的)解决方案基于另一个答案,How do I annotate p-values onto a faceted bar plots on R?,这可能正是您正在寻找的。

df <- data.frame(iris,type = c(1,2))

## Construct your plot exactly as you have already done
## Annotations are replicated.
myplot <- ggplot(df, aes(x=Species,y = Sepal.Length)) + 
    geom_boxplot() + 
    facet_grid(.~type) + 
    geom_signif(annotation = c("foo"),xmin = 1, xmax = 2,y_position = 7.5)
myplot

Original output with repeated annotations

## Disassemble plot
myplot2 <- ggplot_build(myplot)
myplot2$data[[2]]
 x xend     y  yend annotation group PANEL shape colour textsize angle hjust vjust alpha family fontface lineheight
1 1    1 7.392 7.500        foo     1     1    19  black     3.88     0   0.5     0    NA               1        1.2
2 1    2 7.500 7.500        foo     1     1    19  black     3.88     0   0.5     0    NA               1        1.2
3 2    2 7.500 7.392        foo     1     1    19  black     3.88     0   0.5     0    NA               1        1.2
4 1    1 7.392 7.500        bar     1     2    19  black     3.88     0   0.5     0    NA               1        1.2
5 1    2 7.500 7.500        bar     1     2    19  black     3.88     0   0.5     0    NA               1        1.2
6 2    2 7.500 7.392        bar     1     2    19  black     3.88     0   0.5     0    NA               1        1.2
  linetype size
1        1  0.5
2        1  0.5
3        1  0.5
4        1  0.5
5        1  0.5
6        1  0.5
## Note there are 6 observations, 3 for each "PANEL". 
## Now, change the annotation on each "PANEL".
myplot2$data[[2]]$annotation <- c(rep("foo",3),rep("bar",3))

## Reconstruct plot
myplot3 <- ggplot_gtable(myplot2)
plot(myplot3)

Edited output