相关疑难解决方法(0)

将正常曲线叠加到R中的直方图

我已经设法在网上找到如何将正常曲线叠加到R中的直方图,但我想保留直方图的正常"频率"y轴.请参阅下面的两个代码段,并注意在第二个代码段中,y轴被替换为"density".如何将y轴保持为"频率",就像在第一个图中一样.

作为奖励:我想在密度曲线上标记SD区域(最多3 SD).我怎样才能做到这一点?我试过了abline,但是这条线延伸到了图形的顶部,看起来很丑陋.

g = d$mydata
hist(g)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

g = d$mydata
m<-mean(g)
std<-sqrt(var(g))
hist(g, density=20, breaks=20, prob=TRUE, 
     xlab="x-variable", ylim=c(0, 2), 
     main="normal curve over histogram")
curve(dnorm(x, mean=m, sd=std), 
      col="darkblue", lwd=2, add=TRUE, yaxt="n")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

看看上面的图像中,y轴是"密度".我想把它变成"频率".

plot r gaussian histogram

58
推荐指数
3
解决办法
17万
查看次数

ggplot2直方图,密度曲线总和为1

绘制具有对于非标准化数据总和为1的密度曲线的直方图是非常困难的.关于此问题已有很多问题,但他们的解决方案都不适用于我的数据.需要有一个简单的解决方案.我找不到一个有效的简单解决方案的答案.

一些例子:

解决方案仅适用于标准化的正常数据 ggplot2:使用密度曲线叠加直方图

具有离散数据且无密度曲线 ggplot2密度直方图,宽度= .5,vline和居中条位置

没有答案 使用自定义分档使用ggplot2覆盖密度和直方图

在我的数据上,密度不总和为1 在ggplot2中创建密度直方图?

我的数据ggplot2密度直方图与自定义bin边缘不总和为1

这里用例子详细解释,但密度不是1,我的数据 "密度"曲线覆盖在直方图上,其中垂直轴是频率(即计数)或相对频率?

-

一些示例代码:

#Example code
set.seed(1)
t = data.frame(r = runif(100))

#first we try the obvious simple solution that should work
ggplot(t, aes(r)) + 
  geom_histogram() + 
  geom_density()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所以,显然密度不等于1.

#maybe geom_histogram needs a ..density.. ?
ggplot(t, aes(r)) + 
  geom_histogram(aes(y = ..density..)) + 
  geom_density()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

它确实改变了一些东西,但不正确.

#maybe geom_density needs a ..density.. too ?
ggplot(t, aes(r)) + 
  geom_histogram(aes(y = ..density..)) + 
  geom_density(aes(y = ..density..))
Run Code Online (Sandbox Code Playgroud)

那里没有变化.

#maybe binwidth …
Run Code Online (Sandbox Code Playgroud)

r histogram ggplot2

11
推荐指数
1
解决办法
6339
查看次数

"密度"曲线覆盖直方图,其中垂直轴是频率(也称为计数)或相对频率?

当垂直轴是频率或相对频率时,是否有一种方法可以叠加类似于密度曲线的东西?(不是实际的密度函数,因为该区域不需要整合到1).以下问题类似: ggplot2:具有正常曲线的直方图,以及用户自我回答..count..的内容geom_density().然而这似乎不寻常.

以下代码产生过度膨胀的"密度"线.

df1            <- data.frame(v = rnorm(164, mean = 9, sd = 1.5))
b1             <- seq(4.5, 12, by = 0.1)
hist.1a        <- ggplot(df1, aes(v)) + 
                    stat_bin(aes(y = ..count..), color = "black", fill = "blue",
                             breaks = b1) + 
                    geom_density(aes(y = ..count..))
hist.1a
Run Code Online (Sandbox Code Playgroud)

情节

r ggplot2

8
推荐指数
2
解决办法
8994
查看次数

缩放 geom_density 以将 geom_bar 与 y 上的百分比匹配

由于我上次尝试问这个问题时对数学感到困惑,所以再试一次。我想将直方图与平滑分布拟合相结合。我希望 y 轴以百分比表示。

我找不到得到这个结果的方法。上次,我设法找到一种方法将 缩放geom_bar到与 相同的比例geom_density,但这与我想要的相反。

我当前的代码产生这个输出:

ggplot2::ggplot(iris, aes(Sepal.Length)) +
  geom_bar(stat="bin", aes(y=..density..)) +
  geom_density()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

密度和 bar y 值匹配,但缩放是无意义的。我想要 y 轴上的百分比,而不是密度。

一些新的尝试。我们从一个修改为显示百分比而不是计数的条形图开始:

gg = ggplot2::ggplot(iris, aes(Sepal.Length)) +
  geom_bar(aes(y = ..count../sum(..count..))) +
  scale_y_continuous(name = "%", labels=scales::percent)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

然后我们尝试向其添加一个 geom_density 并以某种方式使其正确缩放:

gg + geom_density()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

gg + geom_density(aes(y=..count..))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

gg + geom_density(aes(y=..scaled..))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

gg + geom_density(aes(y=..density..))
Run Code Online (Sandbox Code Playgroud)

和第一个一样。

gg + geom_density(aes(y = ..count../sum(..count..)))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

gg + geom_density(aes(y = ..count../n))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

似乎下降了大约 10 倍......

gg + geom_density(aes(y = ..count../n/10))
Run Code Online (Sandbox Code Playgroud)

与...一样:

gg + geom_density(aes(y …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

5
推荐指数
1
解决办法
1万
查看次数

具有经验密度和 dnorm 函数的叠加直方图

我想将 ggplot 直方图(y 轴 = 计数)与经验密度曲线和正态密度曲线叠加。我试过:

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"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但这具有 y 尺度的密度,并且我希望频率作为 y 轴。

我的第二次试验生成了以频率(计数)为 y 轴但仅以经验密度为基础的图。

library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
b  <- …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

3
推荐指数
1
解决办法
2122
查看次数

将正态曲线叠加到 ggplot2 中的直方图

我想为具有正态分布的名为“Dist”的向量绘制直方图,并用总体参数覆盖正态曲线。我在 stackoverflow 中找到了几篇关于同一主题的帖子,但没有找到我收到的错误消息。

plot1 <-ggplot(data = dist) + 
  geom_histogram(mapping = aes(x = dist), fill="steelblue", colour="black", binwidth = 1) +
  ggtitle("Frequences")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我已经尝试了几件事来向先前的图添加正态曲线:

首先,将一个函数添加到直方图块代码中,并具有所需的值:

stat_function(fun = dnorm, args = list(mean = mu2, sd = sd2))
Run Code Online (Sandbox Code Playgroud)

但是这段代码不会向情节添加任何内容。结果是一样的,只是直方图。

而且,创建一条曲线并将其添加到绘图中。

#Create the curve data
x <- seq(8, 24, length.out=100)
y <- with(dist, data.frame(x = x, y = dnorm(x, mean(mu2), sd(sd2))))

#add the curve to the base plot
plot1 + geom_line(data = y, aes(x = x, y = y), color = "red")
Run Code Online (Sandbox Code Playgroud)

这给了我下一条错误消息:

删除了 100 行包含缺失值 …

overlay r ggplot2

1
推荐指数
1
解决办法
1605
查看次数

标签 统计

r ×6

ggplot2 ×5

histogram ×2

gaussian ×1

overlay ×1

plot ×1