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

如何在ggplot2的facet grid中按分组过滤x轴类别?

解决facet grid面板x轴仅显示关联单元类型的问题

要实现每个facet面板只显示对应构件段类型(Var2)的关联单元类型(Var3),可以通过数据过滤+调整facet参数两步完成:

1. 先清理数据(关键前提)

确保数据中只保留「构件段类型-单元类型」的有效关联组合,过滤掉无关联或百分比为0的行(如果存在这类无效行):

# 过滤无效行(可根据实际关联规则调整过滤条件)
clean_data <- CUDT_2015_2019_Percent_Filter %>%
  filter(Percent > 0) %>%  # 去掉百分比为0的无效条目
  # 如果有明确的关联规则,比如Bent类仅保留指定单元,可加额外过滤:
  # filter(!(Var2 == "Bent" & !Var3 %in% c("Column Head", "Column")))
  group_by(Var2) %>%
  mutate(Var3 = factor(Var3)) %>%  # 按构件段分组重置单元类型的因子水平,清空无效水平
  ungroup()

2. 修改绘图代码,开启自由x轴

在facet_grid中添加scales = "free_x"和space = "free_x"参数,让每个面板的x轴仅显示当前构件段下存在的单元类型,同时自适应面板宽度:

CUDT_2015_2019_Percent_plot <- clean_data %>% 
  ggplot(aes(Var3, Percent, fill = Var4)) +
  geom_col() +
  facet_grid(Var1 ~ Var2, scales = "free_x", space = "free_x") +  # 核心参数
  theme(axis.text.x = element_text(angle = 90, size = 8, hjust = 1, vjust = 0)) +
  labs(fill = "损伤类型", x = "单元类型") +
  scale_fill_manual(values = DColour)

说明:

  • scales = "free_x":让每个面板的x轴独立显示仅存在的变量水平
  • space = "free_x":让面板宽度根据x轴内容多少自适应,避免窄面板挤在一起
  • 提前按Var2分组重置Var3的因子水平,是为了彻底清除数据中不存在的单元类型水平,防止空标签残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:27:05