如何在ggplot的geom_text标签中添加百分比和分数?

7

我有一组数据集,我想查看测试分数和经历某个事件的人数百分比:

dat <- data.frame(score = 1:7,
              n.event = c(263,5177,3599,21399,16228,10345,1452),
              n.total = c(877,15725,13453,51226,32147,26393,7875),
              percentage = c(30,33,27,42,50,39,18))

我可以这样在图表上绘制百分比:

ggplot(data=dat, aes(x=score, y=percentage)) +
  geom_line() +
  geom_text(aes(label = paste0(dat$percentage,"%")))

在此输入图片描述

或者我可以像这样使用分数绘制它:

ggplot(data=dat, aes(x=score, y=percentage)) +
  geom_line() +
  geom_text(aes(label = paste0("frac(",dat$n.event, ",", dat$n.total, 
  ")")),parse = TRUE)

enter image description here

但是我希望它们并排显示。这个方法不行:

ggplot(data=dat, aes(x=score, y=percentage)) +
  geom_line() +
  geom_text(aes(label = paste0(dat$percentage,"%","frac(",dat$n.event, 
  ",", dat$n.total, ")")),parse = TRUE)

我遇到了这个错误:

解析时出错: (text = as.character(lab)) : :1:3: 意外的输入 1: 30%frac(263,877) ^

谢谢你的帮助!
2个回答

8
问题在于parse=True告诉geom_text使用R的数学注释(在?plotmath中有描述)。在这些注释中,%是一个必须转义的特殊符号,空格也被忽略。
为了让%和公式的其余部分和平共处,我们必须使用'%'进行转义,使用*将它与前面的单词连接起来,然后使用~在后面添加一个空格。结果为:
ggplot(data=dat, aes(x=score, y=percentage)) +
     geom_line() +
     geom_text(aes(label = paste0(dat$percentage,"*\'%\'~","frac(",dat$n.event, 
                                  ",", dat$n.total, ")")),parse = TRUE)

enter image description here


有道理!像这种方式更胜另一个答案,因为我不必调整两件事情。谢谢! - Jacob Curtis

4
像这样怎么样:
ggplot(data=dat, aes(x=score, y=percentage)) +
  geom_line() +
  geom_text(aes(label = paste0(dat$percentage,"%"))) + 
  geom_text(aes(label = paste0("frac(",dat$n.event, ",", dat$n.total, 
  ")")),parse = TRUE, nudge_x = 0.0, nudge_y = -2)

通过调整nudge_xnudge_y参数来将标签移动到所需位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接