在数据ggplot2之上叠加普通密度图

时间:2019-06-25 22:49:08

标签: r ggplot2 tidyverse

我使用ggplot2绘制了密度曲线。在绘制数据后,我想在其顶部添加填充的法线密度图。

当前,我正在使用rnorm()创建数据,但这效率不高,并且在小型数据集上效果不佳。

library(tidyverse)

#my data that I want to plot
my.data = rnorm(1000, 3, 10)

#create the normal density plot to overlay the data
overlay.normal = rnorm(1000, 0, 5)

all = tibble(my.data = my.data, overlay.normal = overlay.normal)
all = melt(all)
ggplot(all, aes(value, fill = variable))+geom_density()

enter image description here

目标是绘制数据并在其上覆盖正态分布(填充)。像这样:

ggplot(my.data)+geom_density()+add_normal_distribution(mean = 0, sd = 5, fill = "red)

2 个答案:

答案 0 :(得分:2)

这是一种使用stat_function定义法线并将其绘制在ggplot调用中的方法。

ggplot(my.data %>% enframe(), aes(value)) +
  geom_density(fill = "mediumseagreen", alpha = 0.1) +
  stat_function(fun = function(x) dnorm(x, mean = 0, sd = 5),
                color = "red", linetype = "dotted", size = 1)

enter image description here

答案 1 :(得分:2)

我从Jon的答案和Hadley的答案中找出了解决方案。

my.data = rnorm(1000, 3, 10)

ggplot(my.data %>% enframe(), aes(value)) +
  geom_density(fill = "mediumseagreen", alpha = 0.1) +
  geom_area(stat = "function", fun = function(x) dnorm(x, mean = 0, sd = 5), fill = "red", alpha = .5) 

enter image description here