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

ggplot2多图绘制、数据预处理优化及绘图样式调整问题

更简洁的数据预处理方案

你可以使用tidyr的长表转换功能一次性完成所有P3组问题的统计,无需手动拼接多个临时表,代码如下:

# 加载依赖包
library(tidyverse)

# 读取原始数据
dane <- read.csv2("ankieta.csv", header = TRUE, sep = ";")

# 一站式转换得到目标结构数据
df_merge <- dane %>%
  # 筛选需要处理的P3组问题列 + 学历列
  select(starts_with("P_3"), Wyksztalcenie) %>%
  # 宽表转长表,将问题列名提取为「Pytanie」列,回答值提取为「Lp」列
  pivot_longer(cols = -Wyksztalcenie, names_to = "Pytanie", values_to = "Lp") %>%
  # 按学历、问题、回答值分组计数,结果列命名为「Liczebność」
  count(Wyksztalcenie, Pytanie, Lp, name = "Liczebność") %>%
  # 重命名学历列和原有格式统一
  rename(Wykształcenie = Wyksztalcenie)
三个绘图问题的解决方案

在绘图前先对学历列做因子化处理,解决分面排序问题:

df_merge <- df_merge %>%
  mutate(Wykształcenie = factor(Wykształcenie,
                                # 按你需要的顺序指定因子层级
                                levels = c("podstawowe", "zawodowe", "srednie", "wyzsze")))

优化后的绘图代码如下:

ggplot(data = df_merge, aes(x = factor(Lp), y = Liczebność, fill = Pytanie)) +
  # position = "dodge" 让不同问题的条形并列展示,避免堆叠
  geom_col(position = "dodge") +
  # 分面设置为2列布局
  facet_wrap(~ Wykształcenie, ncol = 2) +
  labs(x = "回答选项",
       y = "数量",
       title = "P3组问题的回答分布,按学历分组:") +
  # 可选:自定义填充配色,也可以删掉这行用默认配色
  scale_fill_brewer(palette = "Set2")

问题原理解释

  • 调整分面顺序:R中分类变量默认按字母顺序排序,将Wykształcenie转为手动指定层级的因子后,分面会自动按你指定的顺序排列。
  • 分面设为2列:原来使用的facet_grid是固定行列的网格布局,替换为facet_wrap并指定ncol = 2即可实现2列分面。
  • 条形填充色设置:你之前的代码仅设置了color = Pytanie,color仅控制条形的边框颜色,填充色需要映射到fill参数,修改后即可自动生成彩色填充的条形。

内容的提问来源于stack exchange,提问作者Ragg47

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:36:05