簡體   English   中英

同一圖上多個直方圖的正態密度曲線

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM