在R中添加Gender分类变量并绘制分组条形图
数据转换与分组条形图绘制方案
1. 生成Gender分类变量
你的数据集是宽格式(Male和Female为单独列),需要转成长格式来生成Gender分类变量,使用tidyverse包的pivot_longer函数即可完成:
library(tidyverse) # 假设原数据集名为school_data school_data_long <- school_data %>% pivot_longer( cols = c(Male, Female), # 指定要转换的列 names_to = "Gender", # 新分类变量的名称 values_to = "Count" # 对应数值列的名称 )
转换后的数据结构示例:
A tibble: 12 × 6No Region District
Name of SchoolGender Count
1 1 South East Gaborone Bokamoso CJSS Male 545
2 1 South East Gaborone Bokamoso CJSS Female 516
3 2 South East Gaborone Marang CJSS Male 550
4 2 South East Gaborone Marang CJSS Female 567… with 8 more rows
2. 绘制分组条形图
根据需求,这里提供两种绘图方式:
方式一:按学校分性别展示
每个地区下的学校分别展示男女生人数:
ggplot(school_data_long, aes(x = Region, y = Count, fill = Gender)) + geom_col(position = "dodge") + # 设置分组条形布局 geom_text( aes(label = Count), position = position_dodge(width = 0.9), vjust = -0.5 # 数值标签位于条形上方 ) + labs( title = "分性别学生人数(按地区)", x = "地区", y = "学生人数", fill = "性别" ) + theme_minimal()
方式二:按地区汇总后展示
先汇总每个地区的男女生总人数,再绘图:
# 先汇总数据 school_data_summary <- school_data_long %>% group_by(Region, Gender) %>% summarise(Total_Count = sum(Count), .groups = "drop") # 绘制汇总后的分组条形图 ggplot(school_data_summary, aes(x = Region, y = Total_Count, fill = Gender)) + geom_col(position = "dodge") + geom_text( aes(label = Total_Count), position = position_dodge(width = 0.9), vjust = -0.5 ) + labs( title = "地区分性别总学生人数", x = "地区", y = "总人数", fill = "性别" ) + theme_minimal()
内容的提问来源于stack exchange,提问作者Katlego Motsatsing
相关产品推荐
相关产品推荐

