在R中绘制多分组柱状图:数据格式问题求助
解决思路与代码实现
1. 先把宽格式数据转成绘图需要的长格式
你的数据现在是宽格式(各个地区作为列名),但绘图工具(比如ggplot)需要长格式——地区单独作为一列,对应每个大学的数值。用tidyverse包的pivot_longer就能搞定,顺便把不需要的Total行和总计列去掉:
# 加载工具包 library(tidyverse) # 假设你的数据框叫df,替换成你实际的变量名 df_long <- df %>% # 只保留两所大学的数据,去掉Total行 filter(HE_Provider != "Total") %>% # 宽转长:把除了HE_Provider之外的列转成Region和Value两列 pivot_longer( cols = -HE_Provider, names_to = "Region", values_to = "Value", # 排除末尾的总计列,只保留地区数据 cols_remove = c(Total_England, Total) )
2. 绘制图表
转好格式后,就能轻松画出以地区为X轴、数值为Y轴、大学为填充分组的图表了。这里给两种常用的类型:
分组柱状图(对比同地区两所大学的数值)
ggplot(df_long, aes(x = Region, y = Value, fill = HE_Provider)) + geom_col(position = position_dodge(width = 0.8)) + # 旋转X轴标签,避免挤在一起 theme(axis.text.x = element_text(angle = 45, hjust = 1)) + labs(title = "各地区两所大学数值对比", x = "地区", y = "数值", fill = "大学")
堆叠柱状图(展示同地区数值占比)
ggplot(df_long, aes(x = Region, y = Value, fill = HE_Provider)) + geom_col() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + labs(title = "各地区两所大学数值堆叠分布", x = "地区", y = "数值", fill = "大学")
优化:如果地区太多X轴太挤,转成横向柱状图
ggplot(df_long, aes(x = Region, y = Value, fill = HE_Provider)) + geom_col(position = position_dodge(width = 0.8)) + coord_flip() + # 翻转坐标轴 labs(title = "各地区两所大学数值对比(横向)", x = "地区", y = "数值", fill = "大学")
内容的提问来源于stack exchange,提问作者ano273
相关产品推荐
相关产品推荐

