如何用R绘制以三个自变量为分组的分组柱状图?
分组柱状图实现方案(R语言)
这种分组柱状图完全可行,核心是先把你的宽格式数据转成长格式,再计算对应分组的中位数,最后用ggplot2就能画出来。下面是一步步的具体实现方法:
步骤1:加载所需工具包
首先需要加载tidyverse(包含数据处理、重塑和绘图的核心函数):
library(tidyverse)
步骤2:数据重塑(宽转长)
你的数据是宽格式(每个变量单独一列),需要转成长格式,把三个自变量和对应的分组变量配对。假设你的数据集名为df,用pivot_longer完成转换:
df_long <- df %>% # 将三个自变量列转成"变量名称-取值"的长格式 pivot_longer( cols = c(freedom, governan, polity), names_to = "variable", values_to = "var_value" # 可选,若不需要自变量的具体取值可忽略 ) %>% # 把对应的分组标签匹配到对应的变量 mutate(subgroup = case_when( variable == "freedom" ~ freedomsubgroup, variable == "governan" ~ governansubgroup, variable == "polity" ~ politysubgroup )) %>% # 移除不再需要的原分组列 select(-c(freedomsubgroup, governansubgroup, politysubgroup))
步骤3:计算各分组的中位数
按variable(X轴大分组)和subgroup(大分组下的子分组)聚合,计算numenvIO的中位数:
df_summary <- df_long %>% group_by(variable, subgroup) %>% summarize(median_numenvIO = median(numenvIO, na.rm = TRUE)) %>% ungroup()
注:na.rm = TRUE用于忽略缺失值,若你的数据无缺失可去掉该参数。
步骤4:绘制分组柱状图
用ggplot2实现同一大分组下子分组柱子并排的效果:
# 可选:指定subgroup的顺序(low→middle→high) df_summary <- df_summary %>% mutate(subgroup = factor(subgroup, levels = c("low", "middle", "high"))) ggplot(df_summary, aes(x = variable, y = median_numenvIO, fill = subgroup)) + # 并排柱子,调整width控制柱子宽度和间距 geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 可选:在柱子上方标注中位数数值 geom_text( aes(label = median_numenvIO), position = position_dodge(width = 0.8), vjust = -0.5 ) + # 设置图表标签 labs( x = "自变量", y = "numenvIO的中位数", fill = "分组等级", title = "不同自变量分组下numenvIO的中位数对比" ) + # 用预设调色板优化颜色 scale_fill_brewer(palette = "Set2") + # 简洁主题 theme_minimal()
内容的提问来源于stack exchange,提问作者Camilla Win
相关产品推荐
相关产品推荐

