如何在ggplot2中将字符对象添加到数字标签:在条形图中将%符号添加到百分比标签

时间:2018-08-22 11:21:12

标签: r ggplot2 bar-chart

我正在尝试在条形图的每个标签旁边添加%符号,以在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后面加上%,以表明这些是百分比而不是计数

enter image description here 我已经尝试过了

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

以下哪个给出错误的结果

enter image description here

任何帮助表示感谢,谢谢!

1 个答案:

答案 0 :(得分:1)

对于标签,您希望将pct的文本粘贴到一个百分号上。进行此类简单操作的最快方法是paste0(pct, "%")。对于更复杂的内容,有诸如sprintfformatCstringr::str_glue之类的选项。如果您使用十进制形式的百分比,则scales::percent(pct)会为您创建格式化的标签。

您可以使用vjust(用于对齐)和nudge_y(用于增加间距)的组合来调整标签的对齐和位置。 ggplot2文档中的建议是vjusthjust保持在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")

相关问题