6.3 直方图
直方图通过在X 轴上将值域分割为一定数量的组,在Y 轴上显示相应值的频数,展示了连续型变量的分布。可以使用如下函数创建直方图:
hist(x)
其中的x
是一个由数据值组成的数值向量。参数freq=FALSE
表示根据概率密度而不是频数绘制图形。参数breaks
用于控制组的数量。在定义直方图中的单元时,默认将生成等距切分。代码清单6-6提供了绘制四种直方图的代码,绘制结果见图6-8。
代码清单6-6 直方图
par(mfrow=c(2,2))
hist(mtcars$mpg) # ❶ 简单直方图
hist(mtcars$mpg, # ❷ 指定组数和颜色
breaks=12,
col="red",
xlab="Miles Per Gallon",
main="Colored histogram with 12 bins")
hist(mtcars$mpg, # ❸ 添加轴须图
freq=FALSE,
breaks=12,
col="red",
xlab="Miles Per Gallon",
main="Histogram, rug plot, density curve")
rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg), col="blue", lwd=2)
x <- mtcars$mpg # ❹ 添加正态密度曲线和外框
h<-hist(x,
breaks=12,
col="red",
xlab="Miles Per Gallon",
main="Histogram with normal curve and box")
xfit<-seq(min(x), max(x), length=40)
yfit<-dnorm(xfit, mean=mean(x), sd=sd(x))
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit, yfit, col="blue", lwd=2)
box()
图6-8 直方图示例
第一幅直方图❶展示了未指定任何选项时的默认图形。这个例子共创建了五个组,并且显示了默认的标题和坐标轴标签。对于第二幅直方图❷,我们将组数指定为12,使用红色填充条形,并添加了更吸引人、更具信息量的标签和标题。
第三幅直方图❸保留了上一幅图中的颜色、组数、标签和标题设置,又叠加了一条密度曲线和轴须图(rug plot)。这条密度曲线是一个核密度估计,会在下节中描述。它为数据的分布提供了一种更加平滑的描述。我们使用lines()
函数叠加了这条蓝色、双倍默认线条宽度的曲线。最后,轴须图是实际数据值的一种一维呈现方式。如果数据中有许多结1,你可以使用如下代码将轴须图的数据打散:
rug(jitter(mtcars$mpag, amount=0.01))
1 数据中出现相同的值,称为结(tie)。——译者注
这样将向每个数据点添加一个小的随机值(一个±amount
之间的均匀分布随机数),以避免重叠的点产生影响。
第四幅直方图❹与第二幅类似,只是拥有一条叠加在上面的正态曲线和一个将图形围绕起来的盒型。用于叠加正态曲线的代码来源于R-help邮件列表上由Peter Dalgaard发表的建议。盒型是使用box()
函数生成的。