Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using facet_grid and facet_wrap Together

Tags:

r

ggplot2

facet

I'm trying to create a chart using facet_wrap with a facet_grid inside each of the wrapped facets but I'm unable to. Any suggestions?

For example, if I'm doing year-on-year comparisons for monthly averages of 2 quantities, I would like to have -

  • 2 facets, one for each quantity,
  • Each of the5 quantity facets has 12 facets inside of it for each of the months
  • Each month facet has two facets inside of it for each of the year

The closest I can come is this,

library(ggplot2)

# create dataset
df <- data.frame(
  Facet1 = rep(c(1,2,3),24),
  Facet2 = c(rep(1,24),rep(2,24)),
  Year = rep(c(rep(2012,12),rep(2013,12)),2),
  Month = rep(rep(1:12,2),2),
  ValueX = sample(0:5,144,replace = TRUE),
  ValueY = sample(0:5,144,replace = TRUE)
)

df <- df[!(df$Facet1 == 2 & df$Facet2 == 2),]

ggplot(df, aes(ValueX, ValueY)) + geom_point() +
    facet_grid(Facet2 + Year ~ Month)

enter image description here

While, what I would ideally like, is something along the lines of this (In my mind, analogous to ggplot() ... + facet_grid(Year ~ Month) + facet_wrap(Facet2~.)) -

enter image description here

PS: I think the facets in the latter are much more distinguishable and neater to go through. Comments? Any alternatives?

like image 817
TheComeOnMan Avatar asked Nov 22 '13 17:11

TheComeOnMan


2 Answers

Maybe I'm misunderstanding what you're trying to do, but does this not achieve what you want?

ggplot(df, aes(ValueX, ValueY)) + geom_point() +
  facet_grid(Facet2 ~ Facet1)

If you want to change the facet titles to match your example have a look at the labeller argument of facet_grid().

like image 113
Ciarán Tobin Avatar answered Oct 02 '22 16:10

Ciarán Tobin


This can easily be done using cowplot:

plot1<-ggplot(df[df$Facet2==1,], aes(ValueX, ValueY)) + geom_point() +
  facet_grid(Year ~ Month)+
  theme_bw()

plot2<-ggplot(df[df$Facet2==2,], aes(ValueX, ValueY)) + geom_point() +
  facet_grid(Year ~ Month)+
  theme_bw()

plot_grid(plot1, plot2, labels = c("1", "2"), nrow = 2)

enter image description here

like image 23
Nakx Avatar answered Oct 02 '22 16:10

Nakx