Lars Lau Raket
Lars Lau Raket

Reputation: 1974

Reversing y-axis in an individual ggplot facet

I am plotting a range of different data measured on the same individuals next to each other in facets. For some types of data a positive value is "good" and for some a negative value is "good". The latter types of variables are usually plotted with flipped y-axes. Is it possible to modify axis directions in individual facets with ggplot?

dat <- data.frame(type = rep(c('A', 'B'), each = 10), x = 1:10, y = rnorm(20))

ggplot(dat, aes(x, y)) + geom_point() + facet_wrap( ~ type, scales = 'free_y')

For example, could I do the above plot with the y-axis for B reversed?

Upvotes: 1

Views: 2029

Answers (2)

QAsena
QAsena

Reputation: 641

This can now also be achieved using the ggh4x package or the facetscales package (see here for facetscales approach):

library(ggh4x)

dat <- data.frame(type = rep(c('A', 'B'), each = 10), x = 1:10, y = rnorm(20))

scales <- list(
  scale_y_continuous(),
  scale_y_reverse()
  )

ggplot(dat, aes(x, y)) + 
  geom_point() +
  facet_wrap( ~ type, scales = 'free_y') +
  facetted_pos_scales(y = scales)

Upvotes: 4

bouncyball
bouncyball

Reputation: 10761

I'm not sure if that's possible, so I would opt for a solution using the grid.arrange function from the gridExtra package.

library(gridExtra)
library(ggplot2)

dat <- data.frame(type = rep(c('A', 'B'), each = 10), x = 1:10, y = rnorm(20),
                  stringsAsFactors = FALSE)

p_A <- ggplot(subset(dat, type == 'A'), aes(x, y)) + geom_point() + facet_wrap( ~ type, scales = 'free_y')+
    scale_y_continuous(breaks = c(-1,0,1))
p_B <- ggplot(subset(dat, type == 'B'), aes(x, y)) + geom_point() + facet_wrap( ~ type, scales = 'free_y')+
    scale_y_reverse(breaks = c(-1,0,1))

grid.arrange(p_A, p_B, nrow = 1)

enter image description here

Upvotes: 3

Related Questions