1. 直方图和频数多边图
直方图和频数多边图可以展示单个变量的分布,相对于箱线图,它们提供更多数据分布的信息,但同时占用更多内存
ggplot(mpg, aes(hwy)) + geom_histogram()
ggplot(mpg, aes(hwy)) + geom_freqpoly()
直方图和频数多边图工作原理相同:先将数据汇总,再计算在每一个水平下观测的数量。唯一的区别在于展示方式:直方图使用条形,而频数多边图使用线形
参数binwidth用以调整组距(如果不需要均匀组距可以修改breaks参数)。试验调整组距非常重要,数据默认会被分为30组,但是这个默认值一般时不合适的,所以需要自己多次调试
ggplot(mpg, aes(hwy)) +
geom_freqpoly(binwidth = 2.5)
ggplot(mpg, aes(hwy)) +
geom_freqpoly(binwidth = 1)
geom_density()绘制的密度曲线图与频数多边图相似。但是一般不推荐使用密度曲线图,因为密度曲线图比较难理解,而且密度曲线有一些隐含的假设,例如曲线应该是无界、连续且平滑的,但是这些假设不一定适用于真实数据
为了展示数据中不同自己的分布,可以将分类变量映射为填充色(用于geom_histogram())或颜色(用于geom_freqpoly()),这样更便于感受各子集分布的区别
ggplot(mpg, aes(displ, color = drv)) +
geom_freqpoly(binwidth = 0.5)
ggplot(mpg, aes(displ, fill = drv)) +
geom_histogram(binwidth = 0.5) +
facet_wrap(~drv, ncol = 1)
2. 条形图
离散变量情形下,条形图和直方图相似,通过geom_bar()绘制
ggplot(mpg, aes(manufacturer)) + geom_bar()
条形图有时候可能比较难理解,因为一般把两种截然不同的图像统称为条形图
上图所使用的数据还没经过处理,因此每个观测值都会对应着其分组条形的一个单位高度
而另一种条形图已经过预处理,如下图,已知三种药品和它们的平均疗效
drugs <- data.frame(
drugs = c("a", "b", "c"), effect = c(4.2, 9.7, 6.1))
处理这类数据,需要修改geom_bar()中的默认设置,不必进行分类计数
不过,可能用geom_point()会更好,因为它占用更少内存,而且不要求y轴包括0
ggplot(drugs, aes(drugs, effect)) + geom_bar(stat = "identity")
ggplot(drugs, aes(drugs, effect)) + geom_point()