Reputation: 1974
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
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
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)
Upvotes: 3