2

这是我的数据

data <- data.frame("Name" = c("Mark", "Jenny", "Linn"),
                   "Freq" = c("5","7", "3"),
                   "Percent" = c("33%", "47%", "20%"))

这是我的阴谋

ggplot(data, aes(x=Name, y=Freq)) + 
  geom_bar(stat="identity", color = "black", fill="dodgerblue1")+
  geom_text(label=data$Freq, vjust=-1)

我怎样才能将我的百分比标签放在我的频率标签旁边,最好放在括号中或用逗号分隔?

4

4 回答 4

3

用 组成文本标签paste/paste0

ggplot(data, aes(x = Name, y = as.numeric(Freq))) + 
  geom_bar(stat = "identity", color = "black", fill = "dodgerblue1")+
  geom_text(label = with(data, paste(Freq, paste0('(', Percent, ')'))), vjust=-1) +
  ylim(0, 8)

在此处输入图像描述

于 2020-06-02T18:36:59.790 回答
1

我认为重要的是,如果要绘制数字变量,请确保它们是数字,而不是示例中的因子,否则比例将是错误的:

data$Freq <- as.numeric(as.character(data$Freq))
labs <- paste0(format(100 * data$Freq/sum(data$Freq), digits = 4), "%")

ggplot(data, aes(x=Name, y=Freq)) + 
  geom_bar(stat="identity", color = "black", fill="dodgerblue1")+
  geom_text(label = labs, vjust=-1) + coord_cartesian(ylim = c(0, 8))

在此处输入图像描述

于 2020-06-02T18:41:07.557 回答
1

第一个出色的答案使用简单的通用策略来标记每个条形,但在我手中不起作用,因为 as.numeric(Freq) 返回 c(2,3,1),而不是预期的 c(5,7,3) (结果,我无法重现显示的图表)。第三个答案解决了因素问题,但没有按照问题中的要求标记条形。简单的解决方案是将频率数设为数字,然后第一个答案有效:

data <- data.frame("Name" = c("Mark", "Jenny", "Linn"),
                   "Freq" = c(5,7,3),
                   "Percent" = c("33%", "47%", "20%"))

而且,一旦我们有了数字,我们就可以让“R”计算百分比:

ggplot(data, aes(x = Name, y = Freq)) + 
  geom_bar(stat = "identity", color = "black", fill = "dodgerblue1") +
  geom_text(label = with(data, sprintf("%d (%.0f%%)",Freq, 100*Freq/sum(Freq))), vjust=-1)+
  ylim(0,8)

在此处输入图像描述

于 2020-06-02T20:52:42.410 回答
0

Is this what you're looking for?

ggplot(data, aes(x=Name, y=Percent)) + 
  geom_bar(stat="identity", color = "black", fill="dodgerblue1")+
  geom_text(label=paste0("N = ",data$Freq), vjust=-1) +
  ylab("")

于 2020-06-02T18:33:12.880 回答