One of the most useful types of visualizations you can create in R is a stacked dot plot. It’s a simple yet powerful plot for exploring and understanding single or multiple groups of data.
In this article, we’ll provide a comprehensive guide on creating stacked dot plots in R, with a special focus on using the ‘ggplot2’ package. We’ll cover the fundamentals of stacked dot plots, understanding the data used for these plots, and how to create and customize these plots in R.
I. Introduction to Stacked Dot Plots
Stacked dot plots, sometimes known as strip plots or one-dimensional scatter plots, display data as dots stacked along an axis, allowing you to view distributions of variables. They are particularly useful when dealing with small to medium-sized datasets or discrete data, as they can display all individual observations while providing a sense of the data distribution.
A stacked dot plot places each dot representing an observation in different categories on top of each other. These plots are a good alternative to histograms or boxplots, which show data distribution summaries, but hide the raw data.
II. Understanding the Data for Stacked Dot Plots
A typical dataset for a stacked dot plot would consist of one or two categorical variables, and one numeric variable. The numeric variable’s values are represented as dots, and if there is a second categorical variable, it can be used to create multiple stacked dot plots side by side for comparison.
For instance, consider a dataset of a class’s students, where ‘Gender’ is a categorical variable (e.g., Male, Female), and ‘Scores’ is a numeric variable representing scores of a test. Here, a stacked dot plot can provide a visual distribution of scores, separated by gender.
III. Creating a Basic Stacked Dot Plot in R
Let’s start with some basic data and proceed to create a stacked dot plot:
# Create a simple data frame
test_scores <- data.frame(
Gender = rep(c("Male", "Female"), each = 20),
Score = c(sample(60:100, 20), sample(65:100, 20))
)
# Create a basic stacked dot plot
ggplot(test_scores, aes(x = Gender, y = Score)) +
geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = 0.5)

The ‘geom_dotplot()’ function creates the stacked dot plot. The argument ‘binaxis = “y”‘ makes the dots stack along the y-axis. The ‘stackdir’ argument specifies the direction in which the dots should stack, and ‘dotsize’ controls the size of the dots.
IV. Customizing the Stacked Dot Plot
One of the strengths of ggplot2 is the ability to customize plots extensively.
1. Changing Colors
You can assign different colors to the dots based on the categories of the second variable:
# Create a stacked dot plot with different colors for different categories
ggplot(test_scores, aes(x = Gender, y = Score, fill = Gender)) +
geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = 0.5)

2. Adding Titles and Labels
The ‘labs()’ function allows you to add titles and labels:
# Create a stacked dot plot with titles and labels
ggplot(test_scores, aes(x = Gender, y = Score, fill = Gender)) +
geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = 0.5) +
labs(title = "Test Scores by Gender", x = "Gender", y = "Score", fill = "Gender")

3. Adjusting Dot Stacking
The ‘stackratio’ argument in ‘geom_dotplot()’ adjusts the distance between the stacked dots:
# Create a stacked dot plot with adjusted dot stacking
ggplot(test_scores, aes(x = Gender, y = Score, fill = Gender)) +
geom_dotplot(binaxis = 'y', stackdir = 'center', stackratio = 1.5, dotsize = 0.5)

4. Modifying Theme Elements
The ‘theme()’ function and its arguments are used to modify non-data ink elements of the plot:
# Create a stacked dot plot with modified theme elements
ggplot(test_scores, aes(x = Gender, y = Score, fill = Gender)) +
geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = 0.5) +
theme_minimal() +
theme(text = element_text(size = 12))

V. Conclusion
Stacked dot plots are a powerful yet simple tool for visualizing and comparing data distributions. They provide an excellent way to examine your data in detail and detect any patterns, clusters, or outliers that might not be apparent in a summary view.