 Open in App
Not now

# How to Add Vertical Lines By a Variable in Multiple Density Plots with ggplot2 in R

• Last Updated : 24 Oct, 2021

In this article, we will discuss how to add vertical lines by a variable in multiple density plots with ggplot2 package in the R  Programming language.

To do so first we will create multiple density plots colored by group and then add the line as a separate element.

## Basic Multiple Density Plot:

To make multiple density plots with coloring by variable in R with ggplot2, we firstly make a data frame with values and category. Then we draw the ggplot2 density plot using the geom_desnity() function. To color them according to the variable we add the fill property as a category in the ggplot() function.

Syntax:

ggplot(dataFrame, aes( x, color, fill)) + geom_density()

Example:

We get multiple density plots in the ggplot of two colors corresponding to two-level/values for the second categorical variable. If our categorical variable has n levels, then ggplot2 would make multiple density plots with n densities/color.

## R

 `# load library ` `library``(tidyverse) ` ` `  `set.seed``(1234) ` ` `  `# create the dataframe ` `df <- ``data.frame``( ` `    ``category=``factor``(``rep``(``c``(``"category1"``, ``"category2"``,``"category3"``), ` `                        ``each=1000)), ` `    ``value=``round``(``c``(``rnorm``(1000, mean=65, sd=5), ` `                  ``rnorm``(1000, mean=85, sd=5), ` `                 ``rnorm``(1000, mean=105, sd=5)))) ` ` `  ` `  ` `  `# Basic density plot with custom color ` `# color property to determine the color of plot ` `# fill property to determine the color beneath plot ` `ggplot``(df, ``aes``(x=value, color=category, fill=category)) + ` `geom_density``(alpha=0.3) `

Output: ## Adding Line by a variable

To add a line by a variable to plot create a new data frame median to a data frame that stores the median of values grouped by categories. Then use the geom_vline function to draw a line across that point colored by category of data.

Syntax:

plot + geom_vline( dataframe, aes( xintercept, color ), size)

Example:

Here, we have calculated the median of values grouped by category and stored it in a data frame named median. Then used geom_vline() function to draw a line across the plot at that point colored according to the category of data.

To create a Median data frame we use,

```median <- df %>%
group_by(category) %>%
summarize(median=median(value))```

Median data frame made from group_by and summarize function looks like:

```# A tibble: 3 x 2
category  median
<fct>      <dbl>
1 category1     65
2 category2     85
3 category3    105```

## R

 `# load library ` `library``(tidyverse) ` ` `  `set.seed``(1234) ` `df <- ``data.frame``( ` `    ``category=``factor``(``rep``(``c``(``"category1"``, ``"category2"``,``"category3"``),  ` `                        ``each=1000)), ` `    ``value=``round``(``c``(``rnorm``(1000, mean=65, sd=5), ` `                  ``rnorm``(1000, mean=85, sd=5), ` `                 ``rnorm``(1000, mean=105, sd=5)))) ` ` `  ` `  `# create median data using above dataframe ` `# group_by function groups the data of same category ` `# summarize function with median ` `# argument calculates the median of value column ` `median <- df %>% ` `  ``group_by``(category) %>% ` `  ``summarize``(median=``median``(value)) ` ` `  ` `  `# Basic density plot with custom color ` `# color property to determine the color of plot ` `# fill property to determine the color beneath plot ` `# geom_vline function draws the line across median  ` `# of each group ` `ggplot``(df, ``aes``(x=value, color=category, fill=category)) + ` `geom_density``(alpha=0.3)+ ` `  ``geom_vline``(data = median, ``aes``(xintercept = median,  ` `                                       ``color = category), size=0.5) `

Output: My Personal Notes arrow_drop_up
Related Articles