我正在尝试在条形图的每个标签旁边添加%符号,以在y轴上显示计数,在x轴上显示因子水平。我已经计算了ggplot2之外的百分比值(pct)用作标签,例如此处
我的数据
dat <-structure(list(GRADE = structure(1:5, .Label = c("0", "1", "2", "3",
"4"), class = "factor"), Count = c(151L, 31L, 31L,
9L, 2L), pct = c(67, 14, 14, 4, 1)), row.names = c(NA, 5L), class =
"data.frame")
地标代码
p <- dat %>%
ggplot(aes(x=GRADE, y=Count, fill=GRADE)) + geom_bar(stat="identity") +
geom_text(aes(label= pct), vjust=1.6, color="black", size=3.5) +
ggtitle("GRADE stage") + theme(plot.title = element_text(hjust = 0.5, size=14, face="bold")) +
scale_fill_brewer(palette="Blues") +
theme(legend.position="bottom")
p
这是哪一个,但我想在67、14、14、4、1后面加上%,以表明这些是百分比而不是计数
p <- dat %>%
ggplot(aes(x=GRADE, y=Count, fill=GRADE)) + geom_bar(stat="identity") +
geom_text(aes(label= pct, "%"), vjust=1.6, color="black", size=3.5) +
ggtitle("GRADE stage") + theme(plot.title = element_text(hjust = 0.5, size=14, face="bold")) +
scale_fill_brewer(palette="Blues") +
theme(legend.position="bottom")
p
以下哪个给出错误的结果
任何帮助表示感谢,谢谢!
答案 0 :(得分:1)
对于标签,您希望将pct
的文本粘贴到一个百分号上。进行此类简单操作的最快方法是paste0(pct, "%")
。对于更复杂的内容,有诸如sprintf
,formatC
或stringr::str_glue
之类的选项。如果您使用十进制形式的百分比,则scales::percent(pct)
会为您创建格式化的标签。
您可以使用vjust
(用于对齐)和nudge_y
(用于增加间距)的组合来调整标签的对齐和位置。 ggplot2
文档中的建议是vjust
和hjust
保持在0和1之间;我通常会注意此建议,如果我需要超出这些限制的内容,请轻推。
设置vjust = 0
会使文本在底部对齐,即,对于放置在y = 150的标签,文本的底部将在y =150。这是我想在调整之前进行的检查任何东西。
library(tidyverse)
dat %>%
ggplot(aes(x = GRADE, y = Count, fill = GRADE)) +
geom_col() +
geom_text(aes(label = paste0(pct, "%")), vjust = 0, color = "black", size = 3.5) +
scale_fill_brewer(palette = "Blues")
从那里,您可以向上微移。 nudge_y
/ nudge_x
以单位沿其轴进行操作,因此nudge_y = 2
将标签的底部相对于Count
的值向上推2。
dat %>%
ggplot(aes(x = GRADE, y = Count, fill = GRADE)) +
geom_col() +
geom_text(aes(label = paste0(pct, "%")), vjust = 0, color = "black", size = 3.5, nudge_y = 2) +
scale_fill_brewer(palette = "Blues")
如果将标签微调得更高或将文本设置为更大,则需要在y缩放比例中添加一个expand
项以提供更多空间。像这样:
scale_y_continuous(expand = expand_scale(mult = c(0.05, 0.1)))
将在y刻度的上端添加更多的空白空间,并避免裁切标签。
值得一提的是,在ggplot2
的最新版本中,geom_col()
代替了geom_bar(stat = "identity")
。