Difference Between facet_grid & facet_wrap ggplot2 Functions in R (2 Examples)


In this tutorial, I’ll illustrate how to use the facet_grid and facet_wrap functions of the ggplot2 package in the R programming language.

The tutorial consists of two examples for the application of facet_grid and facet_wrap. To be more precise, the article consists of this content:

Let’s get started:


Example Data, Add-On Packages & Basic Graph

I use the following data as basement for this R programming tutorial:

data <- data.frame(x = 1:12,        # Create example data frame
                   y = 1:12,
                   g1 = rep(LETTERS[1:4], each = 3),
                   g2 = letters[1:4])
data                                # Print example data frame


table 1 data frame difference between facet_grid and facet_wrap ggplot2 r


Have a look at the table that got returned after executing the previous R programming code. It shows that our example data consists of twelve rows and four variables.

In order to use the functions of the ggplot2 package, we also need to install and load ggplot2:

install.packages("ggplot2")         # Install & load ggplot2 package

Now, we can draw the data without categorizing it in a facet plot as shown below:

ggp <- ggplot(data, aes(x, y)) +    # Create plot without facets
ggp                                 # Print plot without facets


r graph figure 1 difference between facet_grid and facet_wrap ggplot2 r


Figure 1 illustrates the output of the previous R programming code – A ggplot2 scatterplot without facet panels.


Example 1: Using facet_grid() Function to Visualize Groups in ggplot2 Plot

Example 1 explains how a facet plot created based on the facet_grid function looks like. Let’s draw such a plot in R:

ggp + facet_grid(g1 ~ g2)           # Apply facet_grid


r graph figure 2 difference between facet_grid and facet_wrap ggplot2 r


After running the previous R programming syntax the ggplot2 facet graph shown in Figure 2 has been created.

As you can see, the facet_grid function has created a grid of plots with group 1 labels on the right side of the grid and group 2 labels at the top of the grid.

All possible combinations of our two groups are shown, even though some combinations do not exist in our data (e.g. A & d).

So how does a facet_wrap plot of our data look like? Let’s move on to the next example!


Example 2: Using facet_wrap() Function to Visualize Groups in ggplot2 Plot

This example explains the difference of a facet_wrap plot compared to a facet_grid plot.

Let’s draw a facet_wrap graph:

ggp + facet_wrap(g1 ~ g2)           # Apply facet_wrap


r graph figure 3 difference between facet_grid and facet_wrap ggplot2 r


By executing the previous R code we have created Figure 3, i.e. a ggplot2 facet plot created with the facet_wrap function.

Let’s make a comparison of Figure 2 and Figure 3: As you can see, Figure three consists of fewer panels. Group combinations that do not exist in our data are not shown in the plot.

Furthermore, the facet labels are different. While facet_grid shows the labels at the margins of the facet plot, facet_wrap creates a label for each plot panel.

Whether facet_grid or facet_wrap is suited better for your data depends on your specific situation and quite often it’s just a matter of taste.


Video, Further Resources & Summary

In case you need more info on the content of this tutorial, I recommend having a look at the following video of my YouTube channel. I explain the R code of this post in the video.



In addition, you may have a look at the other tutorials of this homepage. You can find some articles below.


In this tutorial, I have illustrated how to apply facet_grid and facet_wrap in the R programming language. Please tell me about it in the comments, in case you have further questions.


Subscribe to the Statistics Globe Newsletter

Get regular updates on the latest tutorials, offers & news at Statistics Globe.
I hate spam & you may opt out anytime: Privacy Policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.