我正在嘗試用 geom_text 標記條形圖。它在大多數情況下都適用于 position_dodge,但在某些情況下,我得到的圖看起來像這樣。我preserve = 'single'用來繞過寬條,但相應的geom_text條不會移動以匹配條。我已經讓它作業了,position_dodge2()但我喜歡position_dodge在這種情況下條形圖一直向左對齊。
ggplot(mtcars, aes(factor(cyl), fill = factor(vs)))
geom_bar(aes(y = ..count..), stat = 'count', position = position_dodge(preserve = 'single'))
geom_text(aes(label = ..count..), stat = 'count', position = position_dodge(width = 1))

因子 8 上的“14”對齊到中間而不是左側。有一個簡單的解決方法嗎?
如果我切換到position_dodge2并使用preserve = 'single'它可以作業,但條形圖以 x 軸為中心。在position_dodge條形圖中左對齊,缺失值右對齊。如果有一種方法可以在position_dodge2不犧牲對齊的情況下使用,那也可以。

uj5u.com熱心網友回復:
我不喜歡這個,但一種可能性是列舉可能性,tidyr::complete以便任何缺失的都得到一個 NA,它將以你想要的間距繪制:
library(tidyverse)
mtcars %>%
count(cyl = factor(cyl), vs = factor(vs)) %>%
complete(cyl, vs) %>% # creates "8 cyl / 1 vs / NA n" row
ggplot(aes(cyl, n, fill = vs))
geom_col(position = position_dodge(preserve = 'single'))
geom_text(aes(label = n), position = position_dodge(width = 1))

uj5u.com熱心網友回復:
您可以像這樣手動執行此操作:
ggplot(mtcars, aes(cyl, fill = factor(vs)))
geom_bar(aes(y = ..count..), stat = 'count', position = position_dodge(preserve = 'single'))
# geom_text(aes(label = ..count..), stat = 'count', position = position_dodge(width = 1))
geom_text(aes(x=5.5, label="4.5", y=4), colour="#376795", text=element_text(size=11))
geom_text(aes(x=6.5, label="4", y=5), colour="#376795", text=element_text(size=11))
geom_text(aes(x=3.5, label="1", y=3), colour="#376795", text=element_text(size=11))
geom_text(aes(x=4.5, label="10", y=11), colour="#376795", text=element_text(size=11))
geom_text(aes(x=7.5, label="14", y=15), colour="#376795", text=element_text(size=11))
但是您必須將 cyl 保留為 double。這不像是一種可推廣的有效方法,但它可以完成這個問題的作業。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420830.html
標籤:
