Facetting is the process of dividing a plot into subplots based on the values of a discrete variable. In the context of the Iris scatterplots, we can split by species across multiple plots.

ggplot(iris, aes(x=Sepal.Length, y=Petal.Length)) +
  geom_point() +

As you can see, facet_grid() splits our single plot into a number of plots equal to the levels of the factor we specify. The syntax behind facet_grid() specifies our “rows” and “columns” for our plots separated by a ~ tilde. E.g. facet_grid(row~column). If we dont have a factor for one of the column/row arguments, we just place a full stop.

A better example of this is using facet_wrap() with our weeds bar graph. facet_wrap() sorts the graphs into a rectangular layout by default.

weeds.bar2 <- ggplot(weeds.summarise2, aes(x=species, y=mean, fill=species))+
  geom_bar(stat="identity", show.legend=F, colour="black")+
  labs(x="Weed Species", y= expression(Flowers~(m^3)))+
  theme(panel.background = element_blank(), panel.grid = element_blank(), axis.line = element_line(colour = "black", size=1), axis.text = element_text(colour="lightsteelblue4", size=12), axis.title = element_text(colour="steelblue", size=14, face="bold"))+
  scale_fill_manual(values = c("lightblue", "steelblue", "darkslateblue"))+
  geom_errorbar(aes(ymin = mean-se, ymax = mean+se), width=0.5)+
  ylim(0, 50)+


As you can see, we have facetted by soil, creating two bar graphs of species by flowers, for each level of soil. With facet_wrap() we only specify one variable. This is useful for factors with many levels as it will automatically wrap to multiple rows. That is to say, instead of having 5 plots in a single row it might place 3 in the top row and 2 in the bottom.