facet_grid
forms a matrix of panels defined by row and column
facetting variables. It is most useful when you have two discrete
variables, and all combinations of the variables exist in the data.
facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE)
facets | a formula with the rows (of the tabular display) on the LHS and the columns (of the tabular display) on the RHS; the dot in the formula is used to indicate there should be no faceting on this dimension (either row or column). The formula can also be provided as a string instead of a classical formula object |
---|---|
margins | either a logical value or a character
vector. Margins are additional facets which contain all the data
for each of the possible values of the faceting variables. If
|
scales | Are scales shared across all facets (the default,
|
space | If |
shrink | If |
labeller | A function that takes one data frame of labels and
returns a list or data frame of character vectors. Each input
column corresponds to one factor. Thus there will be more than
one with formulae of the type |
as.table | If |
switch | By default, the labels are displayed on the top and
right of the plot. If |
drop | If |
p + facet_grid(drv ~ .)p + facet_grid(drv ~ cyl)# To change plot order of facet grid, # change the order of variable levels with factor() # If you combine a facetted dataset with a dataset that lacks those # facetting variables, the data will be repeated across the missing # combinations: df <- data.frame(displ = mean(mpg$displ), cty = mean(mpg$cty)) p + facet_grid(. ~ cyl) + geom_point(data = df, colour = "red", size = 2)# Free scales ------------------------------------------------------- # You can also choose whether the scales should be constant # across all panels (the default), or whether they should be allowed # to vary mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point() mt + facet_grid(. ~ cyl, scales = "free")# If scales and space are free, then the mapping between position # and values in the data will be the same across all panels. This # is particularly useful for categorical axes ggplot(mpg, aes(drv, model)) + geom_point() + facet_grid(manufacturer ~ ., scales = "free", space = "free") + theme(strip.text.y = element_text(angle = 0))# Facet labels ------------------------------------------------------ p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() p# label_both() displays both variable name and value p + facet_grid(vs ~ cyl, labeller = label_both)# label_parsed() parses text into mathematical expressions, see ?plotmath mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "sqrt(x, y)")) ggplot(mtcars, aes(wt, mpg)) + geom_point() + facet_grid(. ~ cyl2, labeller = label_parsed)# label_bquote() makes it easy to construct math expressions p + facet_grid(. ~ vs, labeller = label_bquote(cols = alpha ^ .(vs)))# The facet strips can be displayed near the axes with switch data <- transform(mtcars, am = factor(am, levels = 0:1, c("Automatic", "Manual")), gear = factor(gear, levels = 3:5, labels = c("Three", "Four", "Five")) ) p <- ggplot(data, aes(mpg, disp)) + geom_point() p + facet_grid(am ~ gear, switch = "both")# It looks better without boxes around the strips p + facet_grid(am ~ gear, switch = "both") + theme(strip.background = element_blank())# Margins ---------------------------------------------------------- # Margins can be specified by logically (all yes or all no) or by specific # variables as (character) variable names mg <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() mg + facet_grid(vs + am ~ gear)mg + facet_grid(vs + am ~ gear, margins = TRUE)mg + facet_grid(vs + am ~ gear, margins = "am")# when margins are made over "vs", since the facets for "am" vary # within the values of "vs", the marginal facet for "vs" is also # a margin over "am". mg + facet_grid(vs + am ~ gear, margins = "vs")mg + facet_grid(vs + am ~ gear, margins = "gear")mg + facet_grid(vs + am ~ gear, margins = c("gear", "am"))