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
相关产品推荐
相关产品推荐

