[英]Normal density curves on multiple histograms on a same plot
例如,我有一個數據框,如下所示:
sample1 <- seq(120,197, length.out = 60)
sample2 <- seq(113, 167, length.out = 60)
sample3 <- seq(90,180, length.out = 60)
sample4 <-seq(100, 160, length.out = 60)
df <- as.data.frame(cbind(sample1, sample2, sample3, sample4))
我現在需要為這四個變量創建直方圖,以便它們共享相同的 y 軸,並且還需要在每個直方圖上疊加正常密度曲線。 只要 y 軸相同, facet_wrap() 就可以了。
今天早些時候,我以為我在論壇專家的指導下解決了這個問題,但后來意識到該解決方案只是覆蓋了一條密度曲線,而不是正態分布的曲線。 我已經嘗試了 ggplot 以及基本繪圖函數的多個選項,但是當有多個變量時,對於單個變量來說似乎是一個簡單的任務卻不太可能實現??
關於如何解決這個問題的任何想法?
謝謝
這是使用tidyverse
做到這一點的一種可能方法
library(tidyverse)
# example data
sample1 <- seq(120, 197, length.out = 60)
sample2 <- seq(113, 167, length.out = 60)
sample3 <- seq(90, 180, length.out = 60)
sample4 <- seq(100, 160, length.out = 60)
df <- data.frame(sample1, sample2, sample3, sample4)
# update your original dataframe to a nested dataframe by adding simulated values from normal distribution
df2 = df %>%
gather() %>% # reshape data
group_nest(key) %>% # for each key (i.e. sample)
mutate(norm = map(data, ~rnorm(10000, mean(.x$value), sd(.x$value)))) # simulate 10K observations from the corresponding normal distribution
ggplot()+
# plot histogram using info from nested column data (i.e. original observations)
geom_histogram(data = df2 %>% unnest(data), aes(value, fill=key, ..density..), alpha=0.3)+
# plot density using info from nested column norm (i.e. simulated normal observations)
geom_density(data = df2 %>% unnest(norm), aes(norm, col=key))+
# separate plots by key (i.e. sample)
facet_wrap(~key)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.