Search code examples
rggplot2density-plot

Density curves on multiple histograms sharing same y-axis


I need to overlay normal density curves on 3 histograms sharing the same y-axis. The curves need to be separate for each histogram.

My dataframe (example):

height <- seq(140,189, length.out =  50)
weight <- seq(67,86, length.out = 50)
fev <- seq(71,91, length.out = 50)

df <- as.data.frame(cbind(height, weight, fev))

I created the histograms for the data as:

library(ggplot)
library(tidyr)

df %>% 
gather(key=Type, value=Value) %>% 
ggplot(aes(x=Value,fill=Type)) + 
geom_histogram(binwidth = 8, position="dodge") 

I am now stuck at how to overlay normal density curves for the 3 variables (separate curve for each histogram) on the histograms that I have generated. I won't mind the final figure showing either count or density on the y-axis.

Any thoughts on how to proceed from here?

Thanks in advance.


Solution

  • I believe that the code in the question is almost right, the code below just uses the answer in the link provided by @akrun.

    Note that I have commented out the call to facet_wrap by placing a comment char before the last plus sign.

    library(ggplot2)
    library(tidyr)
    
    df %>% 
      gather(key = Type, value = Value) %>% 
      ggplot(aes(x = Value, color = Type, fill = Type)) + 
      geom_histogram(aes(y = ..density..),
                     binwidth = 8, position = "dodge") +
      geom_density(alpha = 0.25) #+
      facet_wrap(~ Type)