创建直方图和密度图
前面我们已经学会了如何创建几种不同类型的图。散点图和折线图是对数据集中观测
值直接作图,柱状图和饼状图通常用于对不同类别的数据进行粗略总结。
上述这几种图形有以下两方面的局限性:散点图和折线图表达的信息过多,以至于很
难刻画出重点特征;饼状图和柱状图则丢弃过多信息,因此也难以做出可信判断。
直方图能够展示数值向量的分布特征,并且能够在不丢失太多信息的情况下做出总结,
因此更方便使用。下面的例子将演示如何使用 hist( )生成一个服从正态分布的随机数值
向量的直方图,然后添加正态分布的密度函数曲线,如图 7-23 所示。
random_normal <- rnorm(10000)
hist(random_normal)
默认情况下,直方图的 y 轴是数据出现的频数。我们可以验证,这个直方图与由
random_normal 生成的随机向量所代表的标准正态分布非常接近。为了在图上叠加标准
正态分布的概率密度函数曲线 dnorm( ),需要确保直方图的 y 轴表示的是概率,并且曲
线是叠加到该直方图上面的,如图 7-24 所示。
hist(random_normal, probability = TRUE, col = "lightgray")
curve(dnorm, add = TRUE, lwd = 2, col = "blue")
图 7-23
图 7-24
现在,我们来绘制飞机飞行速度的直方图,如图 7-25 所示。飞机在一次飞行中的平均
速度是飞行的路程(distance)除以飞行的时间(air_time):
flight_speed <- flights$distance / flights$air_time
hist(flight_speed, main = "Histogram of flight speed")
图 7-25
图 7-25 看起来和标准正态分布略有不同。在这种情况下,我们使用 density( )来估
计飞行速度的经验分布,在上面绘制一条较为光滑的概率分布曲线,并添加一条竖直线以
标记所有观测值的整体平均水平,如图 7-26 所示。
plot(density(flight_speed, from = 2, na.rm = TRUE),
main = "Empirical distribution of flight speed")
abline(v = mean(flight_speed, na.rm = TRUE),
col = "blue", lty = 2)
图 7-26
正如第 1 个同时含直方图和密度曲线的例子,我们可以将两个图叠加到一起,这使我
们能够更好地观察数据,如图 7-27 所示。
hist(flight_speed,
probability = TRUE, ylim = c(0, 0.5),
main = "Histogram and empirical distribution of flight speed",
border = "gray", col = "lightgray")
lines(density(flight_speed, from = 2, na.rm = TRUE),
col = "darkgray", lwd = 2)
abline(v = mean(flight_speed, na.rm = TRUE),
col = "blue", lty = 2)
图 7-27