You can use the geometric object geom_boxplot() from ggplot2 library to draw a boxplot() in R. Boxplots() in R helps to visualize the distribution of the data by quartile and detect the presence of outliers.

We will use the airquality dataset to introduce boxplot() in R with ggplot. This dataset measures the airquality of New York from May to September 1973. The dataset contains 154 observations. We will use the following variables:

• Ozone: Numerical variable
• Wind: Numerical variable
• Month: May to September. Numerical variable

In this tutorial, you will learn

## Create Box Plot

Before you start to create your first boxplot() in R, you need to manipulate the data as follow:

• Step 1: Import the data
• Step 2: Drop unnecessary variables
• Step 3: Convert Month in factor level
• Step 4: Create a new categorical variable dividing the month with three level: begin, middle and end.
• Step 5: Remove missing observations

All these steps are done with dplyr and the pipeline operator %>%.

```library(dplyr)
library(ggplot2)
# Step 1
data_air <- airquality % > %

#Step 2
select(-c(Solar.R, Temp)) % > %

#Step 3
mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")),

#Step 4
day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
```

A good practice is to check the structure of the data with the function glimpse().

`glimpse(data_air)`

Output:

```## Observations: 153
## Variables: 5
## \$ Ozone   <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ...
## \$ Wind    <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6...
## \$ Month   <ord> May, May, May, May, May, May, May, May, May, May, May,...
## \$ Day     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## \$ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
```

There are NA's in the dataset. Removing them is wise.

```# Step 5
data_air_nona <-data_air %>% na.omit()
```

## Basic box plot

Let's plot the basic R boxplot() with the distribution of ozone by month.

```# Store the graph
box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone))
# Add the geometric object box plot
box_plot +
geom_boxplot()
```

Code Explanation

• Store the graph for further use
• box_plot: You store the graph into the variable box_plot It is helpful for further use or avoid too complex line of codes
• Add the geometric object of R boxplot()
• You pass the dataset data_air_nona to ggplot boxplot.
• Inside the aes() argument, you add the x-axis and y-axis.
• The + sign means you want R to keep reading the code. It makes the code more readable by breaking it.
• Use geom_boxplot() to create a box plot

Output:

### Change side of the graph

You can flip the side of the graph.

```box_plot +
geom_boxplot()+
coord_flip()
```

Code Explanation

• box_plot: You use the graph you stored. It avoids rewriting all the codes each time you add new information to the graph.
• geom_boxplot(): Create boxplots() in R
• coord_flip(): Flip the side of the graph

Output:

### Change color of outlier

You can change the color, shape and size of the outliers.

```box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
```

Code Explanation

• outlier.colour="red": Control the color of the outliers
• outlier.shape=2: Change the shape of the outlier. 2 refers to triangle
• outlier.size=3: Change the size of the triangle. The size is proportional to the number.

Output:

You can add a summary statistic to the R boxplot().

```box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
```

Code Explanation

• stat_summary() allows adding a summary to the horizontal boxplot R
• The argument fun.y controls the statistics returned. You will use mean
• Note: Other statistics are available such as min and max. More than one statistics can be exhibited in the same graph
• geom = "point": Plot the average with a point
• size=3: Size of the point
• color ="steelblue": Color of the points

Output:

## Box Plot with Dots

In the next horizontal boxplot R, you add the dot plot layers. Each dot represents an observation.

```box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
```

Code Explanation

• geom_dotplot() allows adding dot to the bin width
• binaxis='y': Change the position of the dots along the y-axis. By default, x-axis
• dotsize=1: Size of the dots
• stackdir='center': Way to stack the dots: Four values:
• "up" (default),
• "down"
• "center"
• "centerwhole"

Output:

## Control Aesthetic of the Box Plot

### Change the color of the box

You can change the colors of the group.

```ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
geom_boxplot() +
theme_classic()
```

Code Explanation

• The colors of the groups are controlled in the aes() mapping. You can use color= Month to change the color of the box and whisker plot according to the months

Output:

### Box plot with multiple groups

It is also possible to add multiple groups. You can visualize the difference in the air quality according to the day of the measure.

```ggplot(data_air_nona, aes(Month, Ozone)) +
geom_boxplot(aes(fill = day_cat)) +
theme_classic()
```

Code Explanation

• The aes() mapping of the geometric object controls the groups to display (this variable has to be a factor)
• aes(fill= day_cat) allows creating three boxes for each month in the x-axis

Output:

## Box Plot with Jittered Dots

Another way to show the dot is with jittered points. It is a convenient way to visualize points with boxplot for categorical data in R variable.

This method avoids the overlapping of the discrete data.

```box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
```

Code Explanation

• geom_jitter() adds a little decay to each point.
• shape=15 changes the shape of the points. 15 represents the squares
• color = "steelblue": Change the color of the point
• position=position_jitter(width = 0.21): Way to place the overlapping points. position_jitter(width = 0.21) means you move the points by 20 percent from the x-axis. By default, 40 percent.

Output:

You can see the difference between the first graph with the jitter method and the second with the point method.

```box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
```

## Notched Box Plot

An interesting feature of geom_boxplot(), is a notched boxplot function in R. The notch plot narrows the box around the median. The main purpose of a notched box plot is to compare the significance of the median between groups. There is strong evidence two groups have different medians when the notches do not overlap. A notch is computed as follow:

with is the interquartile and number of observations.

```box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
```

Code Explanation

• geom_boxplot(notch=TRUE): Create a notched horizontal boxplot R

Output:

## Summary

We can summarize the different types of horizontal boxplot R in the table below:

Objective

Code

Basic box plot

`ggplot(df, aes( x = x1, y =y)) + geom_boxplot()`

flip the side

`ggplot(df, aes( x = x1, y =y)) + geom_boxplot() + coord_flip()`

Notched box plot

`ggplot(df, aes( x = x1, y =y)) + geom_boxplot(notch=TRUE)`

Box plot with jittered dots

`ggplot(df, aes( x = x1, y =y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))`

YOU MIGHT LIKE: