首页 > 解决方案 > 基于同一数据框中的另一列的条形图

问题描述

我正在尝试创建一个条形图但很困惑......我对 R 很陌生

这是数据框的样子

点我

我想创建一个条形图来显示年龄分布,但基于暴露列,暴露列有 2 组,如图所示,一组称为对照组,另一组称为测试组。

到目前为止,我只知道如何基于一列创建条形图。

barplot(table(df$income),  ylab="amount of income blocks",main="Barplot of Income",col = "firebrick", las=2)

根据要求,这是 dput(df$exposed) 的截图 点我

这就是 dput(df$age) 的样子 点我

我希望条形图看起来像有 2 个条形图,第一个条形图显示基于测试组数量的年龄分布,第二个条形图显示基于对照组数量的年龄分布。

或者,如果可以的话,最好只显示 1 个不同颜色的条形图,其中 1 个颜色代表测试组,1 个颜色代表具有所有年龄分布的对照组。

标签: r

解决方案


这是一种方法ggplot

library(ggplot2)
ggplot(df, aes(x = exposed, fill = age)) +
  geom_bar(position = "dodge")

在此处输入图像描述

样本数据:

df <- structure(list(userid = c("UID 25001", "UID 25002", "UID 25003", 
"UID 25004", "UID 25005", "UID 25006", "UID 25007", "UID 25008", 
"UID 25009", "UID 25010", "UID 10001", "UID 10002", "UID 10003", 
"UID 10004", "UID 10005", "UID 10006", "UID 10007", "UID 10008", 
"UID 10009", "UID 10010"), exposed = c("Control Group (PSA)", 
"Control Group (PSA)", "Control Group (PSA)", "Control Group (PSA)", 
"Control Group (PSA)", "Control Group (PSA)", "Control Group (PSA)", 
"Control Group (PSA)", "Control Group (PSA)", "Control Group (PSA)", 
"Test Group (Exposed)", "Test Group (Exposed)", "Test Group (Exposed)", 
"Test Group (Exposed)", "Test Group (Exposed)", "Test Group (Exposed)", 
"Test Group (Exposed)", "Test Group (Exposed)", "Test Group (Exposed)", 
"Test Group (Exposed)"), gender = c("Male", "Male", "Female", 
"Male", "Male", "Female", "Male", "Female", "Male", "Male", "Male", 
"Female", "Male", "Female", "Male", "Male", "Male", "Female", 
"Male", "Female"), age = c("18-25", "18-25", "51-65", "25-34", 
"25-34", "18-25", "35-50", "51-65", "25-34", "51-65", "51-65", 
"35-50", "35-50", "18-25", "51-65", "25-34", "51-65", "35-50", 
"65+", "35-50"), income = c("$25,000 - $50,000", "$50,001 - $75,000", 
"$50,001 - $75,000", "$25,000 - $50,000", "$50,001 - $75,000", 
"$75,001 - $100,000", "$75,001 - $100,000", "$50,001 - $75,000", 
"$50,001 - $75,000", "$50,001 - $75,000", "$50,001 - $75,000", 
"$75,001 - $100,000", "Greater than $100,000", "$25,000 - $50,000", 
"Greater than $100,000", "$75,001 - $100,000", "Greater than $100,000", 
"$50,001 - $75,000", "$25,000 - $50,000", "$50,001 - $75,000"
), purchased = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA, 
-20L))

推荐阅读