在 r ggplot2 中为百分比值创建条形图

Posted

技术标签:

【中文标题】在 r ggplot2 中为百分比值创建条形图【英文标题】:Create barplots for percentage values in r ggplot2 【发布时间】:2022-01-18 12:40:29 【问题描述】:

我有一个包含多个分类值的数据框,比如说来自 vcd 包的 Arthritis 数据集。

## Load vcd package
library(vcd)

## Load Arthritis dataset (data frame)
data(Arthritis)  

colnames(Arthritis)
"ID" "Treatment" "Sex" "Age" "Improved"

我想为那些改善的患者创建治疗计数的条形图(x 轴,安慰剂和治疗)。 这是代码:

Arthritis1 <- Arthritis %>%
  dplyr::filter(Improved == "Marked") 

ggplot(data = Arthritis1, aes(x = Treatment)) + 
  geom_bar()

但是,现在我想绘制百分比。也就是说,对于所有服用安慰剂的患者,属于“显着”改善的患者的百分比。 对于所有“治疗”的患者,属于“显着”改善的患者的百分比。

我可以得到这样的百分比。

a = table(Arthritis1$Treatment)[1]/table(Arthritis$Treatment)[1]
b = table(Arthritis1$Treatment)[2]/table(Arthritis$Treatment)[2]

Arthritis2 <- as.data.frame(c(a, b)) 
colnames(Arthritis2)[1] <- "var1"

str(Arthritis2)
'data.frame':   2 obs. of  1 variable:
 $ var1: num  0.163 0.512

所以我想要一个有两列的图,值 1 作为顶部,安慰剂达到 0.163,治疗达到 0.512。

但是,我还没有找到将其绘制为百分比的方法,例如 geom_bar() 绘制计数。

【问题讨论】:

这能回答你的问题吗? Show percent % instead of counts in charts of categorical variables 【参考方案1】:

如果您已经计算了百分比,则需要geom_bar(stat = "identity")

library(tidyverse)
library(vcd)
#> Loading required package: grid
data(Arthritis)

Arthritis %>%
  filter(Improved == "Marked") %>%
  count(Treatment) %>%
  mutate(n = n / sum(n) * 100) %>%
  ggplot(aes(Treatment, n)) + 
    geom_bar(stat = "identity") +
    labs(y = "Percentage")

由reprex package (v2.0.1) 于 2021 年 12 月 15 日创建

【讨论】:

以上是关于在 r ggplot2 中为百分比值创建条形图的主要内容,如果未能解决你的问题,请参考以下文章