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

ggplot2中facet_grid的y轴统一刻度与facet间距调整方法

Fixing ggplot2 Facet Alignment & Mirror Y-Axis

Hey there! Let's fix those ggplot2 facet issues you're dealing with. I've revised your code to address both of your requests, and broken down the changes below:

Revised Code

library(ggplot2)
library(dplyr)

# Updated plot code with requested adjustments
df %>% 
  mutate(Val = ifelse(Group == 'Down', -Val, Val),
         Group = factor(Group, levels = c('Up','Down'), ordered = TRUE)) %>%
  ggplot(aes(x = Var, y = Val, color = Group, fill = Group, group = Group)) +
  geom_line(size = 1) +
  geom_area(alpha = 0.75) +
  facet_grid(Group ~ ., scales = 'free_y') +  # Keep x-axis unified, allow y-axis to adjust
  scale_y_continuous(limits = c(-800, 800),  # Set shared range for mirror effect
                     labels = abs, 
                     expand = c(0, 0.1)) +
  scale_fill_manual(values = c('cyan','tomato')) +
  scale_color_manual(values = c('cyan','tomato')) +
  theme_bw() +
  theme(panel.spacing.y = unit(0, "lines"),  # Remove vertical gap between facets
        strip.text.y = element_text(angle = 0))  # Optional: Make facet labels horizontal for readability

Key Adjustments Explained

1. Align Zero Points & Reduce Vertical Facet Spacing

  • Remove vertical gap: Added theme(panel.spacing.y = unit(0, "lines")) to eliminate the space between the two facets. This makes their x-axes sit directly adjacent, so the zero points line up perfectly visually.
  • Unify x-axis: Changed scales = 'free' to scales = 'free_y'—this lets each facet adjust its y-axis independently while keeping the x-axis identical across both, which is what you wanted for a unified x-axis.

2. Mirror Y-Axis with Absolute Value Labels

  • Shared y-axis range: Set limits = c(-800, 800) in scale_y_continuous(). This creates the mirror effect: the "Up" facet uses the positive half (0 to 800) and the "Down" facet uses the negative half (-800 to 0).
  • Absolute value labels: The labels = abs argument converts all y-axis labels to their absolute values, so both facets show positive numbers even though the "Down" data is plotted on the negative scale.
  • This fixes the abnormal behavior you saw earlier because we're defining a consistent range that works for both groups, instead of trying to limit each facet individually.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:18:06