中心标签堆积条(计数)ggplot2

Tyl*_*ker 10 r ggplot2

我正在尝试使用这种方法在堆积条形图上放置标签(但如果现在有更好的方法,我会对所有情况持开放态度):

在ggplot2中的堆积条形图上显示数据值

这是我原来的情节:

dat <- data.frame(with(mtcars, table(cyl, gear)))

ggplot(dat, aes(x = gear, fill = cyl)) +
    geom_bar(aes(weight=Freq), position="stack") +
    geom_text(position = "stack", aes(x = gear, y = Freq, 
        ymax = 15, label = cyl), size=4)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是我尝试在每个填充部分中居标签:

dat2 <- ddply(dat, .(cyl), transform, pos = cumsum(Freq) - 0.5*Freq)

library(plyr)
ggplot(dat2, aes(x = gear, fill = cyl)) +
    geom_bar(aes(weight=Freq), position="stack") +
    geom_text(position = "stack", aes(x = gear, y = pos, 
        ymax = 15, label = cyl), size=4)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何将每个填充部分中的标签居中?

Mar*_*ius 10

这里也有一些多余的ddply动作发生的事情与这一个,因为我知道我想要的解决方案,但遇到了麻烦保持与位置对齐的频率,但我认为该算法用于查找组中点值得发帖:

group_midpoints = function(g) {
  cumsums = c(0, cumsum(g$Freq))
  diffs = diff(cumsums)
  pos = head(cumsums, -1) + (0.5 * diffs)
  return(data.frame(cyl=g$cyl, pos=pos, Freq=g$Freq))
}

dat3 = ddply(dat, .(gear), group_midpoints)

ggplot(dat3, aes(x = gear, fill = cyl)) +
  geom_bar(aes(weight=Freq), position="stack") +
  geom_text(position = "identity", aes(x = gear, y = pos, ymax = 15, label = cyl), size=4)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述