Exploring Data with TidyDensity: A Guide to Using tidy_empirical() and tidy_four_autoplot() in R


Steven P. Sanderson II, MPH


May 24, 2023


Yesterday I had the need to see data that had a grouping column in it. I wanted to use the tidy_four_autoplot() function on it from the {TidyDensity} library on it. This post will explain how I did it. The data in my session was called df_tbl. In this blog post, we will explore the steps involved in using the tidy_empirical() and tidy_four_autoplot() functions from the R library TidyDensity. These functions are incredibly useful when working with data, as they allow us to analyze and visualize empirical distributions efficiently. We will walk through a code snippet that demonstrates how to use these functions within a map() function, enabling us to analyze multiple subsets of data simultaneously.


To follow along with this tutorial, it is assumed that you have a basic understanding of the R programming language, as well as familiarity with the dplyr, purrr, and TidyDensity libraries. Make sure you have these packages installed and loaded before proceeding.

Here is the code that I used, the explanation will follow:

library(dplyr) # to use group_split()
library(purrr) # to use map()
library(TidyDensity) # to use tidy_empirical() and tidy_four_plot()

df_tbl |>
  group_split(SP_NAME) |>
  map(\(run_time) pull(run_time) |>
        tidy_empirical() |>

Code Explanation

Let’s break down the code step by step:

Importing Required Libraries:

  • To access the necessary functions, we need to load the required libraries. In this case, we use library(dplyr) to utilize the group_split() function from the dplyr package, library(purrr) to use the map() function from the purrr package, and library(TidyDensity) to access the tidy_empirical() and tidy_four_autoplot() functions from the TidyDensity package.

Grouping and Splitting the Data:

  • The first line of the code snippet takes a dataframe named df_tbl and uses the group_split() function from the dplyr library to split it into multiple subsets based on a variable called SP_NAME. This creates a list of dataframes, each representing a unique group based on SP_NAME.

Applying Functions to Each Subset using map():

  • The second line of code utilizes the map() function from the purrr library to iterate over each subset of data created in the previous step. The map() function takes two arguments: the object to iterate over (in this case, the list of dataframes) and a function to apply to each element.

Anonymous Function Inside map():

  • Within the map() function, an anonymous function (denoted by (run_time)) is defined. This function takes a single argument named run_time, representing each individual subset of data. The purpose of this anonymous function is to perform the necessary computations and visualizations on each subset of data.

Data Manipulation and Visualization:

  • Inside the anonymous function, the pull(run_time) function is used to extract the run_time column from each subset of data. This column is then passed to the tidy_empirical() function from the TidyDensity library, which calculates the empirical distribution of the data. The result is a tidy dataframe that contains information about the empirical distribution.

Tidy Four Autoplot:

  • The output of tidy_empirical() is then piped (|>) into the tidy_four_autoplot() function from the TidyDensity library. This function generates a visualization called a “Tidy Four Plot,” which consists of four individual plots: empirical density, empirical cumulative density, QQ plot, and histogram.

Final Output:

  • The result of the tidy_four_autoplot() function is the final output of the anonymous function within map(). This output represents the visualization of the empirical distribution for each subset of data.

Happy Coding!