R语言 使用ggplot绘制直方图

atmip9wb  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(151)

我在R中使用ggplot成功绘制直方图时遇到了困难,希望得到有关如何做到这一点的帮助。

**一些背景知识:**我已经在R中进行了一个模拟,模拟了一个流行病的爆发动态,现在我想创建一个超过10,000个流行病模拟的最终大小分布图。
**到目前为止我所做的工作:**我已经模拟了10,000次爆发,在每一次爆发中,我都找到了爆发的最终规模,并将其保存在f中。从typeof(f)中,我得到了答案double,下面是f的一个简短概述:

> tail(f)
[1] 4492    1    2    1    1 4497

然后我在下面代码的帮助下创建了一个(正确的)分布图,但是现在想使用ggplot创建这个分布图,以获得更好的直方图。

h = hist(f)
h$density = h$counts/sum(h$counts)
plot(h,freq = FALSE,
     ylim = c(0,1))

**我的尝试:**我尝试通过下面的代码自己做这件事,但是我没有得到正确的结果。我将在下面发布这两个图的图像,其中第一个是正确的,因为你可以看到y值加起来是正确的,第二个是我使用ggplot得到的,这里y轴上的值是不正确的。我可以做什么来创建一个像第一个一样的图表,但是使用ggplot代替?我猜这与我设置y为密度有关,因为某种原因它不太匹配。

ggplot(data=NULL, aes(x = f)) + 
  geom_histogram(aes(y = ..density..),
                 colour = 1, fill = "white")

图片:

第一节第一节第一节第一节第一次

dw1jzc5e

dw1jzc5e1#

您想要的输出在y轴上没有密度,而是百分比。您的ggplot在y轴上有密度,这是直方图的默认值。要使用ggplot获得相同的结果,您需要使用geom_histogram(aes(y=..count../sum(..count..))

yhived7q

yhived7q2#

基R函数hist计算用于绘制频率的最佳bin数。该数可在ggplot中重复使用,如下所示:

library(ggplot2)

f <- c(4492,    1,    2,    1,    1,  4497)

h <- hist(f, freq = FALSE)

h$breaks
#> [1]    0 1000 2000 3000 4000 5000

ggplot(data = NULL, mapping = aes(x = f, y=..density..)) +
  geom_histogram(bins = length(h$breaks) - 1)

reprex package(v2.0.1)于2023年1月7日创建

相关问题