## Tricks with ggplot

### More ways to facet a plot

Facets are ways to repeat a plot for each level of another variable. `ggplot`

has two ways of defining and displaying facets:

- As a list of plots, using
`facet_wrap`

. - As a grid or matrix of plots, using
`facet_grid()`

.

Examples of both are shown below, using the following plot as a starting point:

```
base.plot <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
base.plot
```

`facet_wrap`

If we want one facet we just type the tilde (`~`

) symbol and then the name of
the variable. This is like typing the right hand side of a
formula for a regression model:

`base.plot + facet_wrap(~cyl)`

If we want two facets we extend the formula, using the `+`

sign:

`base.plot + facet_wrap(~cyl+am)`

Note, the order of variables in the formula makes a difference:

`base.plot + facet_wrap(~am+cyl)`

`facet_grid`

With one variable `facet_grid`

produces similar output. Note the `.`

(period) on
the left hand side of the formula now to make explicit we only have one
variable, and we want it on the x axis:

`base.plot + facet_grid(.~cyl)`

We can flip the facets around by putting the `cyl`

variable on the left hand
side of the `~`

:

`base.plot + facet_grid(cyl~.)`

And `facet_grid`

can also create facets for two or more variables:

`base.plot + facet_grid(am~cyl)`

Here the labelling and the arrangement of plots is perhaps nicer because it is
clearer that plots for `cyl`

are arrange left to right, and for `am`

they are
top to bottom.

### Combining separate plots in a grid

Note that combining separate plots in a grid is different from facetting, and it may be you want that instead.

If you really want to combine several plots, the `gridExtra`

and `cowplot`

packages can be helpful. This is the code from the
example in the graphics section, which may be a useful
starting point:

```
comparison <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot() + ggtitle("Comparison")
relationships <- ggplot(mtcars, aes(wt, mpg, color=factor(gear))) + geom_point() + ggtitle("Relationship")
distributions <- ggplot(mtcars, aes(mpg, color=factor(gear))) + geom_density() + ggtitle("Distribution")
composition <- ggplot(mtcars, aes(factor(cyl), fill = factor(gear))) + geom_bar() + ggtitle("Composition")
mm <- theme(plot.margin=unit(rep(1.5,4), "line"))
gridExtra::grid.arrange(relationships+mm, distributions+mm, comparison+mm, composition+mm, ncol=2)
```