【问题标题】:Formatting histograms in R在 R 中格式化直方图
【发布时间】:2020-09-29 21:52:34
【问题描述】:

我正在尝试将方差伽马分布拟合到 1 分钟对数回报的经验数据。为了可视化结果,我将两个直方图绘制在一起:经验和理论。 (a是经验数据的向量)

SP_hist <- hist(a, 
                col = "lightblue", 
                freq = FALSE, 
                breaks = seq(a, max(a), length.out = 141), 
                border = "white", 
                main = "", 
                xlab = "Value", 
                xlim = c(-0.001, 0.001))

hist(VG_sim_rescaled, 
     freq = FALSE, 
     breaks = seq(min(VG_sim_rescaled), max(VG_sim_rescaled), length.out = 141), 
     xlab = "Value", 
     main = "", 
     col = "orange", 
     add = TRUE)

(经验直方图-蓝色,理论直方图-橙色)

但是,在将 2 个直方图绘制在一起之后,我开始想知道两件事:

  1. 在我所说的两个直方图中,freq = FALSE。因此,y 轴应在 (0, 1) 范围内。在 y 轴上的实际图片值超过 3,000。怎么会发生?如何解决?
  2. 我需要更改分桶大小(桶的宽度)和 x 轴单位长度的密度。怎么可能完成这些任务?

感谢您的帮助。

【问题讨论】:

    标签: r histogram


    【解决方案1】:

    freq=FALSE 表示将整个直方图的面积归一化为1。由于您的 x 轴范围非常小(大约 10^(-4)),因此 y 值必须非常大才能达到 1 的面积(= x 乘以 y)。

    设置 bin 数量的唯一方法是向参数 breaks 提供一个断点向量。理论上,这个参数也接受一个数字,但是这个数字被 hist 忽略了。因此尝试以下方法:

    bins <- 6   # number of cells
    breaks <- seq(min(x),max(x),(max(x)-min(x))/bins)
    hist(x, freq=FALSE, breaks=breaks)
    

    【讨论】:

    • breaks 设置为数字不会被hist() 忽略,但该值仅作为建议。所以breaks = 100 会给你很多垃圾箱,breaks = 3 不会给你很多。 hist() 使用 pretty() 根据建议的数字选择实际的 bin,并优先选择整数边界。
    • @cdaliztz freq=FALSE 表示整个直方图的面积归一化为1。由于您的 x 轴范围非常小(大约 10^(-4)),因此 y 值必须非常大才能达到 1 的面积(= x 乘以 y)。怎么改?
    • @Maxim:“无论如何都可以改变它吗?”这个想法是直方图是通过阶跃函数对概率密度的近似。因此,区域一的归一化非常有意义。您可以通过将 hist$density 中的值 avlues 乘以某个比例因子(将 reuslt 分配给变量并设置 plot=FALSE),将其标准化为您喜欢的任何值。
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 2019-10-15
    • 2012-08-23
    • 2021-03-05
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多