1. 处理遮盖绘制问题
散点图是研究两个连续型变量关系的重要工具。但是在数据量较大时,这些点经常会出现重叠现象,因而掩盖真实的关系。极端情况下,甚至只能看出数据的大致范围,根据这种图像作出的任何结论都是不可靠的。这类问题被称为遮盖绘制
根据数据量的大小与遮盖程度的不同,处理遮盖绘制问题的方法也有所不同
第一类方法涉及到对图形属性的调整,它们对小数据集可能更为有效
- 较小规模的遮盖绘制问题可以通过绘制更小的数据点来缓解,或者使用中空符号
df <- data.frame(x = rnorm(2000), y = rnorm(2000))
norm <- ggplot(df, aes(x, y)) + xlab(NULL) + ylab(NULL)
norm + geom_point()
norm + geom_point(shape = 1) # 中空点
norm + geom_point(shape = ".") # 像素大小
- 对于更大的数据集产生的严重遮盖问题,我们可以改变alpha参数(透明度)让点呈现透明效果。假设我们以比值形式指定alpha值,则分母代表的是一个位置的颜色变为完全不透明时所需重叠点的的数量。可用的最小透明度是1/500,若选取的alpha值更小,则个点将完全透明
norm + geom_point(alpha = 1/3)
norm + geom_point(alpha = 1/5)
norm + geom_point(alpha = 1/10)
- 如果数据存在一定的离散性,可以在点上增加随机扰动geom_jitter()缓解重叠现象。特别是与透明度一起使用时,这种方法十分有效。默认情况下,增加的扰动量是数据分辨率(resolution)的40%,这样可以为数据中的邻接区域留下一定间隙。可以通过调整width和height参数修改默认值
受此启发,可以认为遮盖问题是一种二维核密度估计问题,于是又可以引申出以下三种方法
- 将全部数据点分箱并统计每个箱中点的数量,用geom_bin2d()可视化这个数值(直方图的二维推广)。将图形划分为小的正方形箱会产生分散注意力的视觉假象。可以用geom_hex()(需要加载hexbin包),使用六边形替代
norm + geom_bin2d()
norm + geom_bin2d(bins = 10)
norm + geom_hex()
norm + geom_hex(bins = 10)
- 使用stat_density2d()作二维密度估计,然后参考曲面图将之呈现为三维曲面
- 如果对于y对x的条件分布感兴趣,那么曲面图展示数据分布中所述的技术会对此有所帮助
解决遮盖绘制问题的另一种方法是在图形上添加数据摘要,以指引别人在茫茫数据中探索分布情况。例如,我们可以使用geom_smooth()添加一条平滑曲线来展示数据的中心或使用统计摘要
2. 统计摘要
geom_histogram()和geom_bin2d()使用了类似的几何对象geom_bar()和geom_raster(),以及统计变换stat_bin()和stat_bin2d()。统计变换stat_bin()和stat_bin2d()将数据分组并计算每组中观测值的数量
如果需要的摘要不只是计数呢?以下将研究stat_summary_bin()和stat_summary_2d()来获得不同的统计摘要
ggplot(diamonds, aes(color)) + geom_bar()
ggplot(diamonds, aes(color, price)) + geom_bar(stat = "summary_bin", fun.y = mean)
ggplot(diamonds, aes(table, depth)) +
geom_bin2d(binwidth = 1, na.rm = TRUE) +
xlim(50, 70) + ylim(50, 70)
ggplot(diamonds, aes(table, depth, z = price)) +
geom_raster(binwidth = 1, stat = "summary_2d", fun = mean, na.rm = TRUE) +
xlim(50, 70) + ylim(50, 70)
如果需要这两种统计变换的更多信息,可以参考stat_summary_bin()和stat_summary_2d()的使用指南。可以调整每组大小和摘要函数。stat_summary_bin()支持y、ymin和ymax等图形属性,可以调整数据的表现形式。阅读参考文档获得更多细节
以上统计摘要函数均有其局限性,但可以快速有效地解决大多数问题。如果它们满足不了需要的话,就需要自己绘制摘要了
3. 更多程序包资源
- animInt,打造ggplot2图像地交互功能,包括图像查询、过滤和链接
- GGally,提供出色灵活地散点图矩阵
- ggbio,为基因组数据绘制专业图像
- ggdendro,将树形数据转换为ggplot2支持的数据框格式
- ggfortify,对一些受欢迎R包的对象,提供了增强和自动绘制的方法
- ggenealogy,用于系谱数据的处理和可视化
- ggmcmc,提供MCMC(马尔可夫链蒙特卡罗)算法数据的可视化工具
- ggtern,三元图表绘制工具,应用于你需要在同一张图中展示三个变量的情况
- ggtree,支持对各类元数据的系统进化树分析展示和注解
- granovaGG,实现对方差分析结果的可视化
- ggparallel,用于绘制平行坐标图,以及密切相关的hammock图和共同角度图
- plotlick,谷歌“手气不错”的ggplot2版本,它可以自动为一到三个变量绘制图像
更多拓展资源可以看http://www.ggplot2-exts.org