基于R语言ggplot2,使用二维DataFrame绘制分组条形图
使用ggplot2绘制分组条形图的格式问题
问题描述
我有如下带行列名称的数据框:
A B ANM 16 26 ANO 35 28 PRI 4 14 WHP 0 4 STY 127 474 SUN 30 3 BLD 153 29 TBS 1 96 UCH 1 12 SKA 0 3 IRF 1 3 DOV 28 2我已经用base R画出了目标分组条形图,现在想用ggplot2实现该图。请问是否可以直接通过
aes()函数实现,还是必须转换为文档指定的数据格式?
回答
ggplot2无法直接用当前的宽格式数据通过aes()实现分组条形图,必须转换为长格式(tidy data)——这是由ggplot2基于整洁数据的设计逻辑决定的:每一行对应一个观测,每一列对应一个变量。
具体实现步骤
- 将宽格式数据转换为长格式
使用tidyr包的pivot_longer()函数完成格式转换,先把行名转为单独的分组列,再拆分A、B列:
# 加载所需包 library(ggplot2) library(tidyr) # 假设原数据框名为df,提取行名为分组列 df$group <- rownames(df) # 转换为长格式 df_long <- pivot_longer(df, cols = c(A, B), names_to = "category", values_to = "value")
- 绘制分组条形图
基于长格式数据,通过aes()映射变量,用geom_col()配合position="dodge"实现分组并排效果:
ggplot(df_long, aes(x = group, y = value, fill = category)) + geom_col(position = "dodge") + labs(x = "分组", y = "数值", fill = "类别")
内容的提问来源于stack exchange,提问作者Chris Kouts
相关产品推荐
相关产品推荐

