如何用R绘制以数据框列为条形、基于adorn_totals总和的柱状图?
绘制基于列总和的柱状图解决方案
需求说明
需要绘制一幅柱状图,每个条形对应数据框中的一列,条形高度由janitor::adorn_totals()生成的列总和决定。
问题分析
你之前尝试的代码错误使用了geom_bar的..count..统计逻辑,这是用来计算每个数值的出现次数,而非提取列的总和;同时用lapply生成多幅图,不符合“单幅图展示所有列总和”的需求。
正确实现步骤
- 生成包含总和行的数据框;
- 提取总和行并转换为ggplot所需的长格式数据;
- 用
geom_col直接绘制基于总和值的柱状图。
可复现代码
library(janitor) library(ggplot2) library(tidyr) # 生成带总和行的数据框 df <- data.frame( a = c(1:5), b = c(1:5), c = c(1:5) ) %>% adorn_totals(where = 'row') # 提取最后一行的总和数据并转成长格式 total_data <- df %>% slice(n()) %>% # 选取总和行 pivot_longer(cols = everything(), names_to = "列名", values_to = "总和") # 绘制柱状图 ggplot(total_data, aes(x = 列名, y = 总和, fill = 列名)) + geom_col(show.legend = FALSE) + labs(title = "各列总和柱状图", x = "数据列", y = "总和值") + theme_minimal()
代码说明
adorn_totals(where = 'row'):在数据框末尾添加一行,计算每列的总和;slice(n()):提取数据框的最后一行(即总和行);pivot_longer:将宽格式数据转为长格式,适配ggplot的绘图逻辑;geom_col:直接使用y轴的数值绘制条形,区别于geom_bar的统计计数功能。
内容的提问来源于stack exchange,提问作者Novice
相关产品推荐
相关产品推荐

