如何用ggplot绘制多变量的1值计数合并柱状图?
解决方案
首先,先把你的数据集转换成R可识别的dataframe:
df <- data.frame( V1 = c(1, 0, 0, 1, 0, 1), V2 = c(0, 1, 1, 0, 0, 0), V3 = c(0, 0, 1, 1, 0, 1), V4 = c(1, 0, 0, 1, 0, 1) )
接下来用tidyverse工具链完成数据转换、计数,再绘制整合后的柱状图:
- 加载依赖包
library(tidyverse)
- 转换数据格式并统计每个变量中1的出现次数
这里有两种等价实现方式:
- 方式一:先过滤出值为1的行,再按变量计数
count_df <- df %>% pivot_longer(cols = everything(), names_to = "variable", values_to = "value") %>% filter(value == 1) %>% count(variable, name = "count_of_1")
- 方式二:直接对每个变量求和(因值仅为0和1,求和结果即为1的出现次数)
count_df <- df %>% pivot_longer(cols = everything(), names_to = "variable", values_to = "value") %>% group_by(variable) %>% summarize(count_of_1 = sum(value))
- 绘制整合后的柱状图
ggplot(count_df, aes(x = variable, y = count_of_1)) + geom_bar(stat = "identity", fill = "#2E86AB") + # stat="identity"直接使用y轴的计数数值 labs(title = "各变量中1的出现次数", x = "变量名称", y = "1的出现次数") + theme_minimal()
关键说明
pivot_longer是将宽格式数据转为长格式的核心函数,它会把所有列的列名存入variable列,对应的值存入value列,让ggplot可以按变量分组绘图。- 针对0/1型变量,用
sum(value)统计1的次数比过滤后计数更高效。
内容的提问来源于stack exchange,提问作者harry1027
相关产品推荐
相关产品推荐

