在 ggplot 的分面图中标注柱状图上方的数值

23

在基础图形中,我最喜欢的技巧之一是从比尔·邓拉普(Bill Dunlap)那里学到的。它可以将数字值(或任何值)放置在条形图中的柱子上方(我很少使用它,但我喜欢它)。

mtcars2 <- mtcars[order(-mtcars$mpg), ]
par(cex.lab=1, cex.axis=.6, 
    mar=c(6.5, 3, 2, 2) + 0.1, xpd=NA) #shrink axis text and increas bot. mar.

barX <- barplot(mtcars2$mpg,xlab="Cars", main="MPG of Cars", 
   ylab="", names=rownames(mtcars2), mgp=c(5,1,0),
   ylim=c(0, 35), las=2, col=mtcars2$cyl)

mtext(side=2, text="MPG", cex=1, padj=-2.5)
text(cex=.5, x=barX, y=mtcars2$mpg+par("cxy")[2]/2, mtcars2$hp, xpd=TRUE) 

这将给你:

输入图像描述

我想要在ggplot中使用分面条形图进行同样的注释。显然,值也必须由您用于绘图的两个变量相同,因此您可以使用ftable获取它们。我想将以下ftable结果(非零值)放置在其相应的条形图上方。

library(ggplot2)
mtcars2 <- data.frame(id=1:nrow(mtcars), mtcars[, c(2, 8:11)])
mtcars2[, -1] <- lapply(mtcars2[, -1], as.factor)

with(mtcars2, ftable(cyl, gear, am))

ggplot(mtcars2, aes(x=cyl)) + geom_bar() + 
    facet_grid(gear~am)

这对我来说似乎很困难,但也许比我想象的要容易些。非常感谢您提前考虑这个问题。


这个有用吗?https://dev59.com/E2DVa4cB1Zd3GeqPaiul#9185168 - Ben
@ben 我认为你已经找到了解决方案,但我无法将其连接到 facet_grid - Tyler Rinker
有趣的是,一些人认为这种标签会使显示更加混乱,应该避免使用:https://dev59.com/l2w15IYBdhLWcg3wYawx 和 https://dev59.com/-Wox5IYBdhLWcg3wQSOp#9318468。 - Ben
1个回答

24

我理解你的意思是只需要每个非零柱子的计数(即高度),如果是这样,您可以通过以下方式实现

ggplot(mtcars2, aes(x=cyl)) + 
  geom_bar() + 
  facet_grid(gear~am) + 
  stat_bin(geom="text", aes(label=..count.., vjust=-1))

这将产生以下图表(您可能需要进行一些调整才能显示最高标签): enter image description here

count是由stat_bin()创建的数据框中的新变量,因此您必须使用..count..来引用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接