我试图在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)
我喜欢的是&#34; n = 441&#34;和其他标签出现在图形上方而不是仅在上边界内。有什么建议?
答案 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))
要将标签放在绘图上方,请在绘图区域上方为文本标签添加一些空格,然后使用@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)