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

R语言:facet_nested_wrap实现主分面Y轴独立、子分面Y轴统一

问题:ggh4x嵌套分面的Y轴控制与分面拆分异常
  • 需求:主分面(cartera字段)的Y轴彼此独立,同一主分面下的子分面(tipo_importe字段)Y轴保持一致
  • 当前问题:所有分面Y轴均独立,且cartera="G19"被错误拆分,cartera分组数量为8个且可能动态变化

解决方案

1. 修复Y轴刻度控制逻辑

利用ggh4x的自定义轴配置功能,指定同一cartera分组下的子分面共享Y轴,不同cartera分组间Y轴独立。

2. 解决cartera="G19"拆分问题

预处理数据清理cartera字段的隐藏空格或特殊字符,确保分组值唯一识别。

修改后的代码

library(ggh4x)
library(tidyverse)

# 数据预处理:清理cartera字段的首尾空格,避免分组识别错误
data_clean <- data %>% 
  filter(cia == "0185") %>% 
  mutate(cartera = str_trim(cartera))

# 获取所有cartera唯一分组,用于构建Y轴共享规则
cartera_groups <- unique(data_clean$cartera)

# 生成Y轴共享规则:同一cartera下的子分面使用相同Y轴
y_scales <- map(cartera_groups, ~{
  axis_manual(
    vars(cartera == .x),
    scale = scale_y_continuous(labels = scales::comma)
  )
})

data_clean %>% 
  ggplot(aes(x = fec_cte, y = valor_importe, fill = fec_cte)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  labs(title = "BEL 0185") +
  # 嵌套分面配置:X轴自由缩放,Y轴应用自定义共享规则
  facet_nested_wrap(
    . ~ cartera + tipo_importe,
    scales = "free_x",
    axes = list(y = y_scales)
  ) +
  theme_bw() +
  theme(
    plot.title = element_text(hjust = 0.5, vjust = 2, face = "bold"),
    plot.margin = margin(t = 10, r = 20, b = 10, l = 20),
    axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0), face = "bold"),
    axis.title.x = element_text(face = "bold"),
    axis.text.x = element_text(angle = 45, hjust = 1),
    strip.background = element_rect(fill="red"),
    strip.text = element_text(colour = 'white', face = "bold")
  )

代码说明

  • 数据清理:通过str_trim去除cartera字段的首尾空格,避免因隐藏字符导致的分组拆分错误
  • Y轴规则:通过map遍历每个cartera分组,生成对应子分面的共享Y轴配置,确保同一主分面下Y轴一致
  • 分面配置:scales = "free_x"保留X轴自由缩放,axes参数绑定自定义Y轴规则,实现主分面间Y轴独立、主分面内Y轴统一的需求

内容的提问来源于stack exchange,提问作者Yesid Sánchez Arias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:42:39