数据可视化是 R 的主要应用之一。有许多 R 包可以实现该功能,ggplot2
是其中之一。ggplot2
实现了图形语法,即用来描述和构建图形的连贯性语法规则。而 ggplot2
包是 tidyverse
包的核心 R 包,因此需要下载并加载该包才能使用对应函数。
介绍
可以使用 package::function()
语法来使用 package
包中的 function()
函数。
可以访问 ggplot2 速查表 来查看详细信息。
绘图模板
ggplot2
绘图模板为:ggplot(data = <DATA>) + <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
。多个几何图像叠加可以使用 +
来实现,形如:ggplot(data = <DATA>) + <GEOM_FUNCTION1>(mapping = aes(<MAPPINGS1>)) + <GEOM_FUNCTION2>(mapping = aes(<MAPPINGS2>)) + ...
。
模板中各部分使用加号 + 串联的形式很容易联想到 a + b + c + … 的格式,因此在实际应用中可以把各个部分赋值给 R 对象来实现分层管理
数据集
当使用的映射相同时,可以将映射写在 ggplot
函数中。即 ggplot(data = <DATA>, mapping = aes(<MAPPINGS>)) + <GEOM_FUNCTION1>() + <GEOM_FUNCTION2>() + ...
和 ggplot(data = <DATA>) + <GEOM_FUNCTION1>(mapping = aes(<MAPPINGS>)) + <GEOM_FUNCTION2>(mapping = aes(<MAPPINGS>)) + ...
是相同的。
可以在 ggplot
函数中定义
se
参数的逻辑值可以决定是否添加置信区间数据,默认为 TRUE 。在 se = TRUE
的前提下,可以使用 value
参数指定置信水平,默认为 0.95 。
几何对象函数
几何对象函数决定了图的类型,几何对象是图中用来表示数据的几何图形对象。
函数 geom_point
可以创建点几何对象(散点图)。
函数 geom_smooth
可以创建平滑曲线几何对象(平滑曲线拟合图)。
函数 geom_bar
可以创建条几何对象(条形图)。
函数 geom_abline
、geom_hline
、geom_vline
可以分别创建斜参考线、水平参考线和竖直参考线。斜参考线的斜率和截距由参数 slope
和 intercept
给定,水平参考线和竖直参考线的截距由参数 yintercept
和 xintercept
给定。
函数 geom_freqpoly
可以创建频数多边形几何对象(频数多边形图)。binwidth
参数决定频数多边形的宽度。
函数 geom_histogram
可以创建矩形几何对象(直方图)。 binwidth
参数决定矩形的宽度。
函数 geom_boxplot
可以创建分箱几何对象(箱线图)。
函数 geom_count
可以创建计数重叠点几何对象(计数点图)。
函数 geom_bin2d
可以创建二维分箱计数几何对象(二维分箱计数热度图)。
图形属性映射
当数据集中的数据在某些属性上具有差别,并且想将它们稍作区分展示于同一图中时,可以根据指定的属性,进行图形属性映射。这一过程也可以被称为标度变换。图形属性是指图中对象的可视化属性,包括数据点的大小、形状和颜色。
形状和颜色没有所谓的比较关系,因此属于无序图形属性;而大小具有比较关系,因此属于有序图形属性。将无序变量映射为有序图形属性时,R 会给出警告信息。
名称 | 功能 | 适用几何对象 |
---|---|---|
color | 颜色映射(图例) | point, smooth |
size | 尺寸映射 | point, smooth |
alpha | 透明度映射 | point, smooth |
shape | 形状映射 | point |
linetype | 线型映射 | smooth |
group | 分组映射 | smooth |
fill | 填充映射 | bar |
其中,透明度和尺寸是有序图形属性,颜色和形状是无序图形属性,并且形状映射的数量为 6 个。
当图形属性想具体指定而不是使用映射方式时,图形属性变量的赋值需放置在 aes 函数外,与 mapping 参数并列,并用逗号隔开
手动设置图形属性,需要按照名称进行设置:
名称 | 可选取值 | 备注 |
---|---|---|
color | “red”, “blue”等 | grDevices::colors() 定义的字符串 |
size | 数值型值 | 单位为毫米 |
alpha | [0, 1]中的值 | 数值越低越透明 |
shape | 0~25中的整数值 | 0~14为空心形状,15~20为实心形状,21~24为填充形状,除了填充颜色由 fill 指定,其他颜色均由 color 指定 |
x 和 y 可以看做是不占用图例的图形属性映射,而是分别占用 x 轴和 y 轴
附加函数
除了标准模板,还可以向其中添加附加函数以实现某些功能,其结构为 ggplot(data = <DATA>) + <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>)) + <ADDTIONAL_FUNCTION>
。其中,<ADDTIONAL_FUNCTION>
为指定的附加函数。
分页
可以使用 facet_wrap
函数来创建表格的单变量分页,使用 facet_grid
函数来创建表格的双变量分页。例如 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_wrap(~ class, nrow = 2)
和 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_grid(drv ~ cyl)
的输出分别为以下两图:
可以使用 . 来忽略掉对应维度的分页,例如 facet_grid(. ~ cyl) 和 facet_grid(drv ~ .) 分别对应一行多列和多行一列
坐标系
ggplot2 中默认的坐标系是笛卡尔平面直角坐标系,可以使用附加函数来实现其它坐标系。
coord_flip
函数可以交换 x 轴和 y 轴,常用于水平箱线图和 x 轴标签较长的情况。coodr_polar
函数可以构建极坐标系。coord_quickmap
函数可以为地图设置合适的纵横比。coord_fixed
函数可以实现固定比例尺。
统计变换
统计图除了使用数据集中的原始数据作图之外,也有部分统计图使用经过处理的数据作图,例如条形图的计数(计数是通过统计计算获得的,不是数据集自带的)。这种转换处理原始数据以作图的算法被称为统计变换(stat)。常见的统计变换有:
- 条形图、直方图、频率多边形图的分箱
- 平滑曲线图的拟合
- 箱线图的摘要统计量
几何对象函数使用的统计变换可以通过 stat
参数查看。由于每个几何对象函数都有默认的统计变换函数(反之亦然),因此可以使用对应的统计变换函数来替换几何对象函数。例如 geom_bar()
和 stat_count()
在用法上一般是一样的,起到的效果也是一样的。但一般不会显式使用统计变换,除非有以下考量:
- 需要覆盖默认的统计变换,这通过给 stat 变量赋值实现
- 需要覆盖从统计变换生成的变量到图形属性的默认映射,这通过特定参数实现(具体查看几何对象函数帮助页的计算变量一节的内容)
- 需要在代码中强调统计变换
位置调整
图标元素除了默认的排列方式外,也可以通过参数 position
来调整。常用的位置参数有:
"identity"
值表示直接显示,组内各元素前后重叠"fill"
值表示等高堆叠,各元素组高度相等,组内各元素按数据值的相对大小前后堆叠"dodge"
值表示并列放置,各元素组并排显示,各组内的元素也并排显示"jitter"
值表示数据抖动,将具有相同 x 和 y 值的数据相互错开
jitter 的作用是向数据点添加一个微小的随机扰动,进而实现重叠点的分离。该操作用途广泛,因此 ggplot2 中有 geom_jitter() 来实现 geom_point(position = jitter)
图形分层语法
完整的图形分层模板如下:
1 | ggplot(data = <DATA>) + |
其中七个 <>
包裹的部分是常用参数,从前到后分别为:数据集、几何对象函数、映射集合、统计变换、位置调整、坐标系函数和分面函数。