首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带经验密度和d范数函数的叠加直方图

带经验密度和d范数函数的叠加直方图
EN

Stack Overflow用户
提问于 2018-06-26 13:10:18
回答 1查看 1.8K关注 0票数 2

我想要用经验的和正常的密度曲线来叠加一个ggg图直方图(y轴=计数)。我试过:

代码语言:javascript
复制
library(ggplot2) 
set.seed(1234) 
v <- as_tibble(rnorm(1000, 10, 2.5)) 
ggplot(v, aes(x = value)) +
        geom_histogram(aes(y = ..density..), 
                       bins = 40,  colour = "black", fill = "white") +
        geom_line(aes(y = ..density.., color = 'Empirical'), stat = 'density') +     
        stat_function(fun = dnorm, aes(color = 'Normal'),
                         args = list(mean = 10, sd = 2.5)) +
        scale_colour_manual(name = "Colors", values = c("red", "blue"))

但是这里的密度是y尺度,我想要频率作为y轴。

我的第二次试验产生了图的频率(计数)为y轴,但只有经验密度。

代码语言:javascript
复制
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
b  <- seq(0, 20, by = 0.5)
p1 <- ggplot(v, aes(x = value)) +
    geom_histogram(aes(y = ..count..), 
                   breaks = b,
                   binwidth = 0.5,  
                   colour = "black", 
                   fill = "white") +
    geom_line(aes(y = ..density.. * (1000 * 0.5),
                    color = 'Empirical'),
                    stat = 'density') +
    scale_colour_manual(name = "Colors", values = c("red", "blue"))

在同一幅图中,我也无法显示出一条德范曲线。例如,当我尝试下一条线时,我得到了x轴上的密度曲线(蓝线)。

代码语言:javascript
复制
p2 <- p1 + stat_function(fun = dnorm, aes(color = 'Normal'),
                     args = list(mean = 10, sd = 2.5))
p2  

我假设我必须用双宽度来调整曲线(就像经验线一样),但我不知道怎么做。

我在这里搜索了这个问题,发现了许多类似的问题。但它们都是针对我的第一次试验(密度为y轴),一个经验叠加与计数轴(我的第二次试验)或使用其他(基本)绘图命令,我不熟悉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 14:58:44

我按照@ answer 20650的链接重写了代码,并将@PatrickT的答案应用于我的问题。

代码语言:javascript
复制
library(ggplot2)
n = 1000
mean = 10
sd = 2.5
binwidth = 0.5
set.seed(1234)
v <- as_tibble(rnorm(n, mean, sd))
b  <- seq(0, 20, by = binwidth)
ggplot(v, aes(x = value, mean = mean, sd = sd, binwidth = binwidth, n = n)) +
    geom_histogram(aes(y = ..count..), 
           breaks = b,
           binwidth = binwidth,  
           colour = "black", 
           fill = "white") +
    geom_line(aes(y = ..density.. * n * binwidth, colour = "Empirical"),
           size = 1, stat = 'density') +
    stat_function(fun = function(x) 
           {dnorm(x, mean = mean, sd = sd) * n * binwidth}, 
           aes(colour = "Normal"), size = 1) +
    labs(x = "Score", y = "Frequency") +
    scale_colour_manual(name = "Line colors", values = c("red", "blue"))

决定性的变化是在stat-function行,其中提供了必要的适应为n和二进制宽度。此外,我不知道可以将参数传递给aes()。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51043753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档