首页 > 解决方案 > R:绘制具有两个条件的个人百分比条形图

问题描述

我想在以下数据集中绘制条件 A 和 B、A 和 C 以及 A 和 D 的个体的百分比:

Lines <- "id sex Age A B C D
1       male   90 1 1 0 1
2       female  87 0 1 1 0
3       male  50 1 1 0 0
4       female  54 0 1 0 1"

理想情况下,条形图的 X 轴为 B、C 和 D,Y 轴为百分比。这可以通过一个函数来完成吗?该函数可以外推到具有许多变量的设置,并且还可以按性别和年龄 > 55 来打破?

标签: rggplot2

解决方案


这是一个基本的解决方案。
以下解决方案sapply用于遍历列,然后使用 ggplot 创建图表。

df <-read.table(header=TRUE, text="id sex Age A B C D
                1       male   90 1 1 0 1
                2       female  87 0 1 1 0
                3       male  50 1 1 0 0
                4       female  54 0 1 0 1")


#perform the calculations
results<- sapply(5:7, function(colid) {
        cond <- names(df)[colid]
        result <- sum(df[["A"]]& df[[cond]])
})
conditions<-paste0("A", names(df)[5:7])

results <- data.frame(conditions, results)


#plotting
library(ggplot2)
library(scales)

g<- ggplot(results, aes(x=conditions, y=results/ncol(df))) +
        geom_col(fill="blue") +
        scale_y_continuous(limits=c(0,1), labels=label_percent())
print(g)

推荐阅读