在ggplot2图形的顶部轴上方添加标签,同时将原始x轴保持在底部

时间:2017-11-01 22:34:36

标签: r ggplot2

我试图在ggplot2箱图中添加一些标签来指示观察次数,并且我希望该注释在图表的上轴上方。我可以很容易地在图表中添加它们,我怀疑ggplot_gtable的应用程序可能会这样做,但我不明白如何使用它(一个好的教程方向的一点非常感谢)。这是一些带标签的示例数据:

Count <- sample(100:500, 3)
MyData <- data.frame(Category = c(rep("A", Count[1]), rep("B", Count[2]),
                                    rep("C", Count[3])),
                     Value = c(rnorm(Count[1], 10),
                               rnorm(Count[2], 20),
                               rnorm(Count[3], 30)))
MyCounts <- data.frame(Category = c("A", "B", "C"),
                       Count = Count)
MyCounts$Label <- paste("n =", MyCounts$Count)

ggplot(MyData, aes(x = Category, y = Value)) +
      geom_boxplot() +
      annotate("text", x = MyCounts$Category, y = 35, 
               label = MyCounts$Label)

boxplot with labels

我喜欢的是&#34; n = 441&#34;和其他标签出现在图形上方而不是仅在上边界内。有什么建议?

1 个答案:

答案 0 :(得分:2)

您可以使用geom_text和原始数据框(MyData)添加计数,而不是单独计算计数。关键是我们需要在stat="count"内添加geom_text,以便计算计数并将其用作文本标签。

theme_set(theme_classic())

ggplot(MyData, aes(x = Category, y = Value)) +
  geom_boxplot() +
  geom_text(stat="count", aes(label=paste0("n=",..count..)), y=1.05*max(MyData$Value)) +
  expand_limits(y=1.05*max(MyData$Value))

enter image description here

要将标签放在绘图上方,请在绘图区域上方为文本标签添加一些空格,然后使用@aosmith链接的答案中的代码覆盖裁剪:

library(grid)

theme_set(theme_bw())

p = ggplot(MyData, aes(x = Category, y = Value)) +
  geom_boxplot() +
  geom_text(stat="count", aes(label=paste0("n=",..count..)), 
            y=1.06*max(MyData$Value), size=5) +
  theme(plot.margin=margin(t=20))

# Override clipping
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)

enter image description here