在R中使用ggplot绘制多布尔变量条形图的实现问题
在R中使用ggplot绘制多布尔变量条形图的实现问题
嗨,我来帮你搞定这个需求!你的数据是88行、13列的布尔型数据框,要画一个坐标翻转的条形图,把13个列名放在x轴,每列的TRUE数量作为条形高度,用ggplot完全可以轻松实现,而且完全不需要用到你提到的那个'key'。
首先,先解决你没有样本数据的问题——我教你生成一个和你的数据结构完全一致的模拟数据集,这样你可以直接测试代码:
# 设置随机种子让结果可复现 set.seed(123) # 生成88行13列的布尔值数据框 df <- data.frame(matrix(sample(c(TRUE, FALSE), 88*13, replace = TRUE), nrow = 88)) # 给列名命名(你可以换成自己的实际列名) colnames(df) <- paste0("变量", 1:13)
接下来是核心步骤:因为ggplot更适合处理长格式数据,我们需要先把你的宽格式数据转换成长格式,然后统计每列的TRUE数量。这里用tidyverse工具包(包含ggplot2、dplyr、tidyr)来处理会非常方便:
# 加载tidyverse包(如果没安装先运行install.packages("tidyverse")) library(tidyverse) # 转换数据格式并统计每列TRUE的数量 df_summary <- df %>% # 把所有列转成两列:一列是列名,一列是对应的值 pivot_longer(everything(), names_to = "变量名称", values_to = "布尔值") %>% # 按变量名称分组 group_by(变量名称) %>% # 统计每个组里TRUE的数量(TRUE在R中等价于1,sum直接得到数量) summarise(TRUE数量 = sum(布尔值))
现在有了统计好的数据,就可以绘制条形图了,用coord_flip()实现坐标翻转:
ggplot(df_summary, aes(x = 变量名称, y = TRUE数量)) + # 用stat="identity"因为我们已经统计好了数值,不需要ggplot再计算 geom_bar(stat = "identity", fill = "#4682B4") + # 翻转坐标,让变量名称显示在x轴(垂直方向) coord_flip() + # 添加标签和标题 labs(x = "变量名称", y = "TRUE的数量", title = "各布尔变量的TRUE数量统计") + # 用简洁的主题 theme_minimal()
如果你不习惯用tidyverse,也可以用基础R的方法来统计,再传给ggplot:
# 基础R统计每列TRUE的数量 true_counts <- colSums(df) # 转成ggplot需要的数据框格式 df_summary_base <- data.frame(变量名称 = names(true_counts), TRUE数量 = true_counts) # 绘制图形 ggplot(df_summary_base, aes(x = 变量名称, y = TRUE数量)) + geom_bar(stat = "identity") + coord_flip()
这样两种方法都能得到你想要的图形,选你顺手的就行~
备注:内容来源于stack exchange,提问作者Socsi2
相关产品推荐
相关产品推荐

