Here are 3 ways to create a jitter plot in R, also called a strip chart or a dot plot which is a one-dimensional scatter plot. A jitter plot in R makes it easier to view overlapping data points by categorical or discrete values.
In that scenario, the scatter plot groups all data points in one line above the category, but the jitter plot creates additional dispersion. In other words, this variation of scatter plot displays numerical data along a single strip and jitter to avoid substantial overlap.
Jitter plot in R using ggplot2
Here is a scatter plot that you can make with the geom_point.
require(ggplot2) ggplot(chickwts, aes(x = feed, y = weight)) + geom_point( size = 3, alpha = 0.7, shape = 16, color = "cadetblue") + geom_vline( xintercept = seq(1.5, length(unique(chickwts$feed)), by = 1), color = "gray90", size = 1) + labs( title = "the effectiveness of various feed supplements", subtitle = "on the growth rate of chickens after six weeks", x = "feed type", y = "weight (grams)") + theme_minimal() + theme(panel.grid = element_blank())
There are no default gridlines, and here is more about them. In this case, there are vertical lines between ggplot2 axis categories. All data points are above the category, and they overlap. It might be hard to evaluate data in general.
By using the geom_jitter, you can create a jitter plot in ggplot2, and the difference in the result is noticeable.
set.seed(123) ggplot(chickwts, aes(x = feed, y = weight)) + geom_jitter( size = 3, alpha = 0.7, shape = 16, width = 0.2, color = "cadetblue") + geom_vline( xintercept = seq(1.5, length(unique(chickwts$feed)), by = 1), color = "gray90", size = 1) + labs( title = "the effectiveness of various feed supplements", subtitle = "on the growth rate of chickens after six weeks", x = "feed type", y = "weight (grams)") + theme_minimal() + theme(panel.grid = element_blank())
Horizontal jitter with ggplot2
If you want to rotate the ggplot2 plot, you can do that like in this post by using the coord_flip.
set.seed(123) ggplot(chickwts, aes(x = feed, y = weight)) + geom_jitter( size = 3, alpha = 0.7, shape = 16, width = 0.2, color = "cadetblue") + geom_vline( xintercept = seq(1.5, length(unique(chickwts$feed)), by = 1), color = "gray90", size = 1) + labs( title = "the effectiveness of various feed supplements", subtitle = "on the growth rate of chickens after six weeks", x = "feed type", y = "weight (grams)") + coord_flip()+ theme_minimal() + theme(panel.grid = element_blank())
Jitter plot in plotly
You might be interested to get an interactive jitter plot. If you have the jitter plot in ggplot2, the easiest way is to translate that into plotly. Here is how to do that, but there is a problem with the subtitle.
require(plotly) set.seed(123) ggplotly( ggplot(chickwts, aes(x = feed, y = weight)) + geom_jitter( size = 3, alpha = 0.7, shape = 16, width = 0.2, color = "cadetblue") + geom_vline( xintercept = seq(1.5, length(unique(chickwts$feed)), by = 1), color = "gray90", size = 1) + labs( title = "the effectiveness of various feed supplements", subtitle = "on the growth rate of chickens after six weeks", x = "feed type", y = "weight (grams)") + theme_minimal() + theme(panel.grid = element_blank()) )
As I mentioned, there is a problem with the R plotly subtitles after using the ggplotly function. Here is a post with the solution to fix that.
require(dplyr) ggplotly( ggplot(chickwts, aes(x = feed, y = weight)) + geom_jitter( size = 3, alpha = 0.7, shape = 16, width = 0.2, color = "cadetblue") + geom_vline( xintercept = seq(1.5, length(unique(chickwts$feed)), by = 1), color = "gray90", size = 1) + labs( title = "the effectiveness of various feed supplements", subtitle = "on the growth rate of chickens after six weeks", x = "feed type", y = "weight (grams)") + theme_minimal() + theme(panel.grid = element_blank()) ) %>% layout(title = list(text = paste0('the effectiveness of various feed supplements', '<br>', '<sup>', 'on the growth rate of chickens after six weeks', '</sup>')))
Jitter plot in base R
It is worth respecting the functionality of base R. Despite the improvements of multiple packages, some of the base functionality is better. Here is a jitter plot in base R that looks pretty enough. The tricky part is to add a subtitle in the base R plot.
set.seed(123) stripchart( chickwts$weight ~ chickwts$feed, vertical = TRUE, pch = 20, cex = 1.5, col = "sky blue", method = "jitter", frame.plot = FALSE, ylab = "weight (grams)", xlab = "feed type", main = "the effectiveness of various feed supplements" ) subtitle <- "on the growth rate of chickens after six weeks" mtext(at = 1, adj = -0.8, subtitle)
Jitter chart in Excel
Sometimes it is necessary to do something similar in Excel. It is not as easy as it is in R, but doable. Here are two posts that will help you.
Leave a Reply