【问题标题】:Overlay a Normal Density Plot On Top of Data ggplot2在数据 ggplot2 上覆盖正态密度图
【发布时间】:2019-11-07 19:38:29
【问题描述】:

我使用 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()

目标是绘制我的数据并在其上覆盖正态分布(使用填充)。比如:

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

【问题讨论】:

  • 你的问题到底是什么?
  • 我在底部的问题中进行了编辑。

标签: r ggplot2 tidyverse


【解决方案1】:

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

【讨论】:

  • 谢谢乔恩。无论如何要为 stat 函数 + 一个 alpha 数字做一个全身填充,这样我就可以让它变得有点透明?
【解决方案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) 

【讨论】:

    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 2018-09-06
    • 2018-11-26
    • 2011-10-20
    • 2020-06-12
    相关资源
    最近更新 更多