You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:50:55