首页 > 解决方案 > 在ggplot中绘制百分比

问题描述

我有一个包含 1800 行和 2 列的数据框,riskGrp ("1", "2", '3") 和死亡率 (0, 1)。我想要的是一个条形图,显示 riskGrp 的死亡率百分比。我尝试了以下方法,但只得到了每个风险组贡献的死亡率百分比。这是我的代码:

library(tidyverse)

v1 <- data.frame(
  riskGrp = c("Low", "Low", "Low", "Mid", "Mid", "High", "High", "High", "High"), 
  mortality = c(0, 0, 1, 0, 1, 0, 1, 1, 1) 
)

ggplot(v1, aes(riskGrp)) + 
  geom_bar(aes( y=mortality/sum(mortality)), stat = "identity") +
  labs(fill = "ICU Disposition", x="Risk Group") +
  scale_y_continuous(labels = scales::percent)

该图应包含三个条形:“低”表示死亡率 = 33%,“中”表示死亡率为 50%,“高”表示死亡率为 75%。如何获得分层死亡率?

谢谢!

安德鲁


好的,这是一个最小的可重现示例:

library(tidyverse)

v1 <- data.frame(
  riskGrp = c("Low", "Low", "Low", "Mid", "Mid", "High", "High", "High", "High"), 
  mortality = c(0, 0, 1, 0, 1, 0, 1, 1, 1) 
)

ggplot(v1, aes(riskGrp)) + 
  geom_bar(aes( y=mortality/sum(mortality)), stat = "identity") +
  labs(fill = "ICU Disposition", x="Risk Group") +
  scale_y_continuous(labels = scales::percent)

该图应包含三个条形:“低”表示死亡率 = 33%,“中”表示死亡率为 50%,“高”表示死亡率为 75%。

标签: rggplot2

解决方案


I would just aggregate the data beforehand and then plot using geom_col:

library(tidyverse)

v1 %>%
    group_by(riskGrp) %>%
    summarise(mortality = mean(mortality)) %>%
    ggplot(aes(riskGrp, mortality))+geom_col()+
    scale_x_discrete(limits = c("Low", "Mid", "High"))+
    scale_y_continuous(labels = scales::percent)

enter image description here


推荐阅读