6.3 直方图

直方图通过在X 轴上将值域分割为一定数量的组,在Y 轴上显示相应值的频数,展示了连续型变量的分布。可以使用如下函数创建直方图:

  1. hist(x)

其中的x是一个由数据值组成的数值向量。参数freq=FALSE表示根据概率密度而不是频数绘制图形。参数breaks用于控制组的数量。在定义直方图中的单元时,默认将生成等距切分。代码清单6-6提供了绘制四种直方图的代码,绘制结果见图6-8。

代码清单6-6 直方图

  1. par(mfrow=c(2,2))
  2. hist(mtcars$mpg) # ❶ 简单直方图
  3. hist(mtcars$mpg, # ❷ 指定组数和颜色
  4. breaks=12,
  5. col="red",
  6. xlab="Miles Per Gallon",
  7. main="Colored histogram with 12 bins")
  8. hist(mtcars$mpg, # ❸ 添加轴须图
  9. freq=FALSE,
  10. breaks=12,
  11. col="red",
  12. xlab="Miles Per Gallon",
  13. main="Histogram, rug plot, density curve")
  14. rug(jitter(mtcars$mpg))
  15. lines(density(mtcars$mpg), col="blue", lwd=2)
  16. x <- mtcars$mpg # ❹ 添加正态密度曲线和外框
  17. h<-hist(x,
  18. breaks=12,
  19. col="red",
  20. xlab="Miles Per Gallon",
  21. main="Histogram with normal curve and box")
  22. xfit<-seq(min(x), max(x), length=40)
  23. yfit<-dnorm(xfit, mean=mean(x), sd=sd(x))
  24. yfit <- yfit*diff(h$mids[1:2])*length(x)
  25. lines(xfit, yfit, col="blue", lwd=2)
  26. box()

6.3 直方图 - 图1

图6-8 直方图示例

第一幅直方图❶展示了未指定任何选项时的默认图形。这个例子共创建了五个组,并且显示了默认的标题和坐标轴标签。对于第二幅直方图❷,我们将组数指定为12,使用红色填充条形,并添加了更吸引人、更具信息量的标签和标题。

第三幅直方图❸保留了上一幅图中的颜色、组数、标签和标题设置,又叠加了一条密度曲线和轴须图(rug plot)。这条密度曲线是一个核密度估计,会在下节中描述。它为数据的分布提供了一种更加平滑的描述。我们使用lines()函数叠加了这条蓝色、双倍默认线条宽度的曲线。最后,轴须图是实际数据值的一种一维呈现方式。如果数据中有许多结1,你可以使用如下代码将轴须图的数据打散:

  1. rug(jitter(mtcars$mpag, amount=0.01))

1 数据中出现相同的值,称为结(tie)。——译者注

这样将向每个数据点添加一个小的随机值(一个±amount之间的均匀分布随机数),以避免重叠的点产生影响。

第四幅直方图❹与第二幅类似,只是拥有一条叠加在上面的正态曲线和一个将图形围绕起来的盒型。用于叠加正态曲线的代码来源于R-help邮件列表上由Peter Dalgaard发表的建议。盒型是使用box()函数生成的。