In this tutorial, I’ll show you how to create small multiple charts with Plotly Express.
So I’ll explain the syntax of how to create Plotly small multiple charts.
I’ll also show you a few clear examples, so you can see how it’s done.
The tutorial has several sections. If you need something specific, just click on the appropriate link.
Table of Contents:
- A quick introduction to small multiples in Python with Plotly
- The syntax to create Plotly small multiple charts
Ok. Let’s get started
A Quick Introduction to Small Multiple Charts with Plotly
The small multiple chart is one of the most useful data visualization techniques available to the data scientist.
Long time readers of the Sharp Sight blog will know that I really love small multiple charts.
Small multiple charts are useful, because they enable you to break out a data visualization into separate “panels”. Typically, you’ll take an existing plot, and break it out into panels by an additional categorical variable. This enables you to compare the data across multiple categories.
Again: small multiple charts are extremely powerful and useful for data analysis.
But they are often under-used, because they are often hard to make. This is particularly true in Python.
Having said that, although they are somewhat difficult to make with many Python data visualization packages, they are moderately easy to create with Plotly Express … as long as you know the right syntax.
Let’s take a look at the syntax to see how we can create small multiple charts with Plotly.
The syntax to create Plotly small multiple charts
Here, I’ll show you the syntax for how to create small multiple charts with Plotly.
To be clear: there is no single function that you can use to create small multiple charts.
Rather, you create small multiple charts by using special parameters available with existing Plotly express functions.
For example, you can use special parameters to create small multiple charts for the:
And several other plotly express tools.
To do this, you need to use the
facet_col parameters inside of those existing plotly functions:
So for example, if you want to create a small multiple histogram, then you can call
px.histogram() and use the
facet_row= parameter inside the function call (I’ll show you examples of this in the examples section).
Again: there’s no single function for a Plotly small multiple. You create them by using a few parameters inside the existing Plotly Express functions.
Plotly small multiple parameters
There are several parameters that control the creation of small multiple charts with Plotly express.
The 3 most important are:
Again, these parameters are available for px.scatterplot, px.line, px.histogram, px.imshow, and most of the other Plotly express functions. These parameters work the same in the context of all of those tools.
Let’s quickly take a look at what each of those parameters does.
facet_row= parameter controls the variable that breaks out the visualization into different panels, oriented vertically (i.e., in the row direction).
This is typically a categorical variable.
facet_col= parameter controls the variable that breaks out the visualization into different panels, oriented horizontally (i.e., in the column direction).
This is typically a categorical variable.
facet_col_wrap= parameter controls the number of panels in the horizontal direction (i.e., the “column” direction).
The argument to this parameter should be an integer.
So for example, if you set
facet_col_wrap = 3, the function will plot new panels vertically and there will be 3 “columns” of panels. Any additional panels will be “wrapped” to a new row of panels.
These parameters may be somewhat difficult to understand when explained like this, so the best way to understand how they work is with clear examples.
Examples: how to create Plotly small multiple charts
Now that we’ve looked at the syntax and parameters associated with Plotly small multiple charts, let’s look at some examples.
- Create a simple Plotly histogram
- Facet on 1 variable, by column
- Facet on 1 variable, by row
- Wrap panels by column
- Create a “facet grid” by facetting on 2 variables
Run this code first
Before you run the examples, you’ll need to import some packages and run some preliminary code.
First we need to import a couple of Python packages.
import seaborn as sns import plotly.express as px
We’ll obviously need
plotly.express to create our Plotly charts and Plotly small multiples.
We’ll also use Seaborn to get a dataset.
In these examples, we’ll use the
diamonds dataframe that’s available in the Seaborn package.
You can get it with the following code:
diamonds = sns.load_dataset('diamonds')
Set Up Image Rendering
Finally, before you can run Plotly, you may need to change some setting for the visualizations to render properly.
By default, Plotly is set up to render images in browser windows.
If you’re using an Integrated Development Environment like Spyder for your Python data science programs, you’ll need to set it up to render plots from Plotly. (I use Spyder, so I need to do this step myself.)
Note that if you’re using Jupyter, you can skip this code!
To set up Plotly to render your plots as svg images in your IDE, you can run the following code:
import plotly.io as pio pio.renderers.default = 'svg'
Once you’ve run all of this preliminary code, you should be read to run these examples.
(If you have any problems getting set up, leave a comment in the comments section near the bottom of the page.)
EXAMPLE 1: Create a simple Plotly histogram
First, we’ll start by creating a simple Plotly histogram.
We’re going to create a simple histogram, because this will serve as a basis for the small multiple charts we’ll create later.
Let’s take a look:
px.histogram(data_frame = diamonds ,x = 'price' )
And here’s the output:
Here, we’re plotting data from the
Specifically, we’re plotting the
price variable on the x axis, and showing the distribution by plotting a histogram.
If you’re confused about what we’re doing here, you should read our tutorial about Plotly express histograms.
EXAMPLE 2: Facet on 1 variable, by column
Now that we have our simple histogram from example 1, let’s “facet” this plot by a categorical variable.
Specifically, we’ll facet along the columns on the ‘
Let’s take a look:
px.histogram(data_frame = diamonds ,x = 'price' ,facet_col = 'cut' )
Notice that the output is very similar to the output in example 1. Specifically, each little “panel” in this new plot is like a small version of the original histogram.
So here, we’ve faceted on the
cut variable. To do this, we’ve used the
facet_col parameter. Specifically, we set
facet_col = 'cut'. (Notice that the name of the variable is in quotations.)
And in the output, each panel is a small version of the original. There’s one panel for each value of the
That’s why we call it a “small multiple” chart. There are multiple small versions of the original; one small version for each level of the facet variable.
EXAMPLE 3: Facet on 1 variable, by row
Next, we’ll facet on a single variable, by row.
Let’s take a look:
px.histogram(data_frame = diamonds ,x = 'price' ,facet_row = 'cut' )
This is very similar to example 2.
But here, instead of faceting by column, we’re faceting by row.
To do this, we set
facet_row = 'cut'. The
cut variable is a categorical variable in the
The resulting plot contains 5 small versions of the original histogram, organized into rows.
EXAMPLE 4: Wrap panels by column
Next we’ll facet along the columns by a categorical variable,
But in this example, the faceting variable,
clarity, has too many categories to fit well in a single row of panels.
So, we’ll use
facet_col_wrap to “wrap” the panels to a new row, after we exceed a maximum number of panels across.
Let’s take a look and then I’ll explain further.
px.histogram(data_frame = diamonds ,x = 'price' ,facet_col = 'clarity' ,facet_col_wrap = 4 )
So what happened here?
In this example, we faceted on the
clarity variable. We faceted by column.
This variable has 8 unique values, which is arguably too many to fit horizontally.
So to make the panels fit better in the plot area, we set
facet_col_wrap = 4. This specifies that we want a maximum of 4 panel columns (i.e., 4 panels across).
After reaching 4 panels in the column direction, the
facet_col_wrap parameter causes Plotly to “wrap” the next panel to a new row.
That’s really all this does.
facet_col_wrap sets the maximum number of panels across, and forces the system to start a new row for additional panels.
EXAMPLE 5: Create a “facet grid” by facetting on 2 variables
Next, we’ll facet on two variables.
We’ll facet by column on the
cut variable and by row on the
px.histogram(data_frame = diamonds ,x = 'price' ,facet_col = 'cut' ,facet_row = 'color' )
Here, we’ve faceted on two categorical variables,
To do this, we used both faceting parameters:
Specifically, we set
facet_col = 'cut' and
facet_row = 'color'.
As you can see in the output plot, this has faceted the original histogram into multiple panels, broken out by the values of
cut along the columns, and the values of
color along the rows of the grid.
This type of plot is very useful for multivariate data analysis. You need to learn this technique!
Final Note: You can use this technique with different plotly visualizations
One final note before we end.
In this tutorial, I’ve demonstrated these Plotly small multiple techniques using Plotly histograms.
BUT, you can use this technique with a variety of other Plotly express plots, such as:
- plotly scatterplot
- plotly bar chart
- plotly line chart
- plotly imshow
- … and others
The parameters work the same for those visualizations as they do for the histogram. Try them out!
Leave your other questions in the comments below
Do you still have questions about creating small multiple charts in Plotly?
If so, just leave your questions in the comments section below.
If you want to master Plotly, join our course
In this blog post, I’ve shown you how create small multiple charts with Plotly Express. But to really master Python data visualization with Plotly, there’s a lot more to learn.
That said, if you’re serious about learning Plotly and if you want to master data visualization in Python, you should join our premium online course, Plotly Mastery.
Plotly Mastery is an online course that will teach you everything you need to know about Python data visualization with the Plotly package.
Inside the course, you’ll learn:
- how to create essential plots like bar charts, line charts, scatterplots, and more
- techniques for creating multivariate data visualization
- how to add titles and annotations to your plots
- learn “how to think” about visualization
- how to “customize” your charts, and make them look beautiful
- how to “tell stories with data”
- and much more …
Additionally, when you enroll, you’ll get access to our unique practice system that will enable you to memorize all of the syntax you learn. If you practice like we show you, you’ll memorize Plotly syntax and become “fluent” in data visualization.
You can find out more here: