【问题标题】:Create barplots for percentage values in r ggplot2在 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() 绘制计数。

【问题讨论】:

标签: r ggplot2 dplyr


【解决方案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 日创建

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多