如何用ggplot绘制显示公投赞成反对票的堆叠条形图?
解决堆叠条形图绘制问题
首先你需要把数据整理成ggplot偏好的长格式(tidy data),当前你的数据是宽格式,没法直接生成堆叠效果。按以下步骤修改:
- 创建完整数据框并转换为长格式
# 合并原始数据为数据框 measure_b_result <- data.frame( pre = c("Del Mar Heights","Rancho Penasquitos","La Jolla","Mira Mesa","Miramar"), yes_on_b = c(7533,16607,6243,10200,443), no_on_b = c(8477,20478,8406,10054,356) ) # 转换为长格式(需要dplyr和tidyr包,未安装则先运行install.packages(c("dplyr","tidyr"))) library(dplyr) library(tidyr) measure_b_long <- measure_b_result %>% pivot_longer(cols = c(yes_on_b, no_on_b), names_to = "vote_type", values_to = "vote_count") %>% mutate(vote_type = factor(vote_type, levels = c("yes_on_b", "no_on_b"), labels = c("赞成", "反对")))
- 绘制堆叠条形图
library(ggplot2) ggplot(measure_b_long, aes(x = pre, y = vote_count, fill = vote_type)) + geom_bar(stat = "identity") + labs(title = "各区域公投提案票数分布", x = "区域", y = "票数", fill = "投票倾向") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠
关键说明
- 宽格式转长格式是堆叠图的核心操作,
pivot_longer把原本独立的赞成/反对列合并为类别列(vote_type)和数值列(vote_count) fill = vote_type指定按投票类别区分颜色,自动生成堆叠效果- 最后的theme设置是优化x轴区域名的显示,避免长名称重叠
内容的提问来源于stack exchange,提问作者Luke Harold
相关产品推荐
相关产品推荐

