在R中绘制多列布尔值的百分比条形图
生成各列TRUE值占比的条形图
当然可以实现,以下是基于ggplot2包的完整解决方案:
步骤1:加载数据并计算占比
先还原你的数据框,再计算每列中TRUE值的占比(百分比):
# 还原数据框 df <- structure(list(chesapeakebay = c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), icefishing = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE), lakesimpoundments = c(FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE), nontidal = c(FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE), tidal = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame")) # 计算每列TRUE的百分比并整理成长格式 library(dplyr) library(tidyr) plot_data <- df %>% summarise(across(everything(), ~ mean(.x) * 100)) %>% pivot_longer(cols = everything(), names_to = "变量", values_to = "TRUE占比(%)")
步骤2:绘制条形图
用ggplot2绘制条形图,同时添加百分比标签让结果更直观:
library(ggplot2) ggplot(plot_data, aes(x = 变量, y = `TRUE占比(%)`)) + geom_bar(stat = "identity", fill = "#2E8B57", alpha = 0.8) + geom_text(aes(label = paste0(round(`TRUE占比(%)`, 1), "%")), vjust = -0.3, size = 4) + labs(title = "各变量TRUE值占比", x = "变量名称", y = "TRUE值占比(%)") + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
这段代码会生成一个清晰的条形图:每个条形对应数据框的一列,高度代表该列TRUE值的占比,条形上方标注具体百分比,x轴标签倾斜45度避免重叠。
如果还没安装所需包,先运行以下命令安装:
install.packages(c("dplyr", "tidyr", "ggplot2"))
内容的提问来源于stack exchange,提问作者Ryan Gary
相关产品推荐
相关产品推荐

