R使用ggplot2实现成对变量合并绘制并排对比柱状图的方法
ggplot2实现种族死亡数据成对并排对比图
1. 依赖加载与数据整理
首先需要加载tidyverse套件(包含dplyr、tidyr、ggplot2核心工具),随后将你提供的宽格式原始数据转换为ggplot2适配的长结构,同时拆分种族与指标字段:
# 加载依赖包 library(tidyverse) # 构造你的输入数据(实际使用时替换为你自己的读入数据代码即可) raw_df <- data.frame( Race = c("AIAN_Deaths", "AIAN_Expected", "Asian_Deaths", "Asian_Expected"), Alabama = c(127, 0, 88, 58), Alaska = c(1763, 444, 40, 52), Arizona = c(46, 1178, 353, 258), Arkansas = c(620, 122, 46, 71) ) # 数据清洗转换 clean_df <- raw_df %>% # 拆分Race列,单独提取种族、指标两个维度 separate(Race, into = c("种族", "指标"), sep = "_") %>% # 将州维度从列转为行,适配ggplot2长数据要求 pivot_longer(cols = -c(种族, 指标), names_to = "州", values_to = "人数")
2. 绘制并排对比图
通过position_dodge实现同维度柱子并排展示,自定义颜色匹配你要求的死亡数(红色)、预期数(蓝色),用分面实现按种族分组:
ggplot(clean_df, aes(x = 州, y = 人数, fill = 指标)) + # 并排柱状图,调整dodge宽度控制同组柱子间距 geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 自定义填充色:Deaths为红色,Expected为蓝色 scale_fill_manual(values = c("Deaths" = "#ff0000", "Expected" = "#0000ff")) + # 按种族分面,实现分组展示效果 facet_wrap(~种族) + # 基础主题调整,可按需修改 theme_bw(base_size = 12) + labs(x = "州", y = "人数", fill = "指标类型")
如果不需要分面,希望所有种族的对比放在同一坐标轴下,可将x轴修改为x = interaction(种族, 州),再适当调整x轴标签旋转角度即可。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

