gsmafra
gsmafra

Reputation: 2494

Align x axis with grid.arrange

I'm trying to plot two aligned graphics, but one of them has a label and of them doesn't.

Example:

library(dplyr)
library(ggplot2)

df <-
  seq(as.Date("2019-01-01"), as.Date("2019-01-31"), by = 1) %>%
  as_tibble() %>%
  rename(day = value) %>%
  mutate(
    x = seq(1, 31, by = 1),
    y = x * 2 - 20
  )

p1 <-
  df %>%
  gather(key, value, c(x, y)) %>%
  ggplot(aes(x = day, y = value, color = key)) +
  geom_line(size = 1)

p2 <-
  df %>%
  ggplot(aes(x = day, y = y / x)) +
  geom_line(size = 1)

grid.arrange(
  p1, p2
)

Result:

enter image description here

Is there a way to align the axis without using facet_wrap? (I want to add specific label formatters for each plot because they are in different units and facet_wrap doesn't allow me to do that as far as I know)

Upvotes: 4

Views: 3174

Answers (1)

s__
s__

Reputation: 9485

You can manage them as different plots, with same legend, using cowplot package:

library(cowplot)
legend <- get_legend(p1)   # get the legend of the first one plot

# here the plots in a grid
prow <- plot_grid( p1 + theme(legend.position="none"),
           # here you add the percentage
           p2 + theme(legend.position="none")+ scale_y_continuous(labels = scales::percent),
           align = 'v',
           labels = c("A", "B"),
           hjust = -1,
           nrow = 2)

# here you add the legend
p <- plot_grid( prow, legend, rel_widths = c(3, .3))
p

enter image description here

Upvotes: 5

Related Questions