【问题标题】:Normal density curves on multiple histograms on a same plot同一图上多个直方图上的正态密度曲线
【发布时间】:2019-06-20 14:12:52
【问题描述】:

我有一个数据框,例如,如下所示:

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 以及基本绘图函数的数字选项,但是对于单个变量来说似乎是一项简单的任务在有多个变量时不太可能实现??

关于如何解决这个问题有什么想法吗?

谢谢

【问题讨论】:

  • 当您说 normal density curves 时,我想您并不是指与 N(0,1) 定律相关的高斯密度函数,因为您的值超出了 [-1, 1] 范围。您想将曲线与相同的高斯分布进行比较吗?应该使用哪些参数值(均值和方差)?更重要的是,这对您的问题意味着什么?
  • 此外,您的样本均匀分布在这些间隔上。所以直方图不会产生太多信息。

标签: r ggplot2 probability-density


【解决方案1】:

这是使用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)

【讨论】:

  • 你去@Antoniosk,你搞定了。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
相关资源
最近更新 更多