My third post here. I am leading the plot design using lines and areas in ggplot2 with facet_grid(). The code works well. Here is the data I used:
#My data
df <- structure(list(Var = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L,
8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
11L, 12L), .Label = c("1", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "11", "12"), class = c("ordered", "factor")), Val = c(46.0233614780009,
85.6471698498353, 83.8100037071854, 98.6977939726785, 94.0682111307979,
92.1834012959152, 79.1579962009564, 62.9422475816682, 2.36891501117498,
25.3718703053892, 87.2779565863311, 32.0944497128949, 444.363995105959,
337.84707041923, 93.2718054391444, 171.342949266545, 81.6757546272129,
135.7353850035, 286.496924120001, 450.293861329556, 339.913251576945,
80.7274857070297, 122.17661133036, 370.043645612895), Group = c("Up",
"Up", "Up", "Up", "Up", "Up", "Up", "Up", "Up", "Up", "Up", "Up",
"Down", "Down", "Down", "Down", "Down", "Down", "Down", "Down",
"Down", "Down", "Down", "Down")), row.names = c(NA, -24L), class = "data.frame")
Now this is my plot:
library(ggplot2)
library(dplyr)
#Code for the plot
df %>%
mutate(Val=ifelse(Group=='Down',-Val,Val),
Group=factor(Group,levels = c('Up','Down'),ordered = T)) %>%
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')+
scale_y_continuous(labels = function(x) abs(x),
expand = c(0,0.1))+
scale_fill_manual(values=c('cyan','tomato'))+
scale_color_manual(values=c('cyan','tomato'))+
theme_bw()
Which produces this baby:
Until here everything is fine. I would like if it is possible to modify two elements:
How can I reduce the vertical space between both facets so that visually there would be only one x-axis (align in the same axis both zeroes and reduce that space).
I would like to have the same scale in both y-axis, so the code is designed to have a mirror effect. My issue is that when I set a scale in y-axis like this:
scale_y_continuous(labels = function(x) abs(x),expand = c(0,0.1),limits = c(NA,800))
Everything changes:
I would like if possible that both y-axis have the same scale starting in 0 to 800 but respecting the magnitude. In this case upper would go from 0 to 800 and down from 0 to -800 but masked according to labels to have the mirror effect.
Many thanks for the help.



