在 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 中为百分比值创建条形图的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签

R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例(对计算获得的百分比进行近似,值保留整数部分)使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签

将百分比标签添加到堆积条形图ggplot2

堆叠条形图将变量转换为ggplot2 R中不相关变量的基于存在缺失的百分比

R语言ggplot2可视化在分面图(facet_grid)的条形图上添加计数(count)或者百分比(percent)标签实战

R语言ggplot2可视化:将条形图(bar plot)和线图(line plot)组合在一起并使用双Y轴(double y axis)进行可视化其中一个Y轴显示为百分比