【问题标题】:R: writing percentage as label in ggplot geom_bar fillR:在ggplot geom_bar填充中写入百分比作为标签
【发布时间】:2023-04-08 19:52:01
【问题描述】:

这可能是一个简单的问题。 我有一个很大的 df 临床数据,称为 d。

     head(d[,c("catCRP","ageCat")])
      catCRP  ageCat
    1     <4 (50,66]
    2     >4 (40,50]
    3     >4 (30,40]
    4     <4 (50,66]
    5     >4 (30,40]
    6     >4 (30,40]

我正在用 ggplot2 绘制它:

ggplot(d,aes(x=ageCat,fill=catCRP))+geom_bar(position="fill")

在这种情况下,ggplot 绘制每个类别的百分比。

是否可以将百分比数字和实际计数添加到绘图中?

我是初学者,我查看了所有文档,但没有找到答案。

【问题讨论】:

  • geom_textgeom_label,也许。
  • 离散化数据通常会扭曲或模糊连续变量之间更精细的关系点。您可能还想尝试:ggplot(d, aes(CRP, group=ageCat)+geom_density()ggplot(d, aes(y=CRP, x=age)+geom_density_2d()

标签: r ggplot2 labels


【解决方案1】:
library(ggplot2)
library(dplyr)

d <- data.frame(ageCat = rep(1:5, each=20)
                ,catCRP = rep(1:5,20))

p <- d %>% group_by(ageCat, catCRP) %>% summarise(n = n()) %>%
 mutate(p = n/sum(n))

p1 <- ggplot(p,aes(x=ageCat,y=p, fill=catCRP))+geom_bar(stat = "identity", position="fill") + theme_bw() 
p1 + geom_text(aes(label = paste0(n," (",p*100,"%)")), size = 3, hjust = 0.5, vjust = 3, position =     "stack") 

【讨论】:

  • 要确保 y 轴以百分比表示,请使用 scale 包,然后附加 scale_y_continuous(label = percent)
  • 不要使用vjust 定位标签,而是将ypos = cumsum(p) - 0.5*p) 添加到您的mutate 语句中,然后使用y=ypos 将标签定位在geom_text 中。这样,您将获得每个条形部分内标签的精确垂直居中。此外,在百分比不是整数的典型情况下,最好包含roundsprintf 以获得您喜欢的百分比小数位数。有关这些建议的示例,请参阅this SO answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2013-10-23
  • 1970-01-01
相关资源
最近更新 更多