【问题标题】:Plot a histogram using ggplot使用 ggplot 绘制直方图
【发布时间】:2023-01-07 22:07:55
【问题描述】:

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

图像:

【问题讨论】:

    标签: r ggplot2 histogram


    【解决方案1】:

    基本 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-01-07

    【讨论】:

      猜你喜欢
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多