Центральные ярлыки уложены в стойку 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)
![enter image description here]()
Здесь моя попытка центрировать метки в каждом разделе заполнения:
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)
![enter image description here]()
Как я могу центрировать метки в каждом разделе заполнения?
Ответы
Ответ 1
Там было какое-то постороннее действие 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)
![enter image description here]()