首页 > 解决方案 > 在 R 中格式化直方图

问题描述

我正在尝试将方差伽玛分布拟合到 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 轴单位长度的密度。怎么可能完成这些任务?

谢谢您的帮助。

标签: rhistogram

解决方案


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

设置 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)

推荐阅读