统计转换和位置调整是ggplot2包中的重要概念,统计转换通常使用stat参数来引用,位置调整通常使用position参数来引用。
bin是分箱的意思,在统计学中,数据分箱是一种把多个连续值分割成多个区间的方法,每一个小区间叫做一个bin(bucket),这就意味着每个bin定义一个数值区间,连续值会落到相应的区间中。
一,统计转换图层
使用stat_函数可以减少图层的使用,从而引起对统计变换的注意,而不是视觉外观。
1,移除重复值
使用stat_unique()移除重复值:
stat_unique(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
参数注释:
- geom:指定几何图层,默认值是point
- position:位置调整,默认值是identity(不做位置调整)
使用unique的两种方式:
ggplot(dat, aes(x, y)) + geom_point(size=5,alpha=0.2,stat = "unique") ggplot(dat, aes(x, y))+stat_unique(geom="point",size=5,alpha=0.2)
2,不改变数据
identity是对数据不做任何改变:
stat_identity(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., show.legend = NA, inherit.aes = TRUE)
使用identity的两种方式:
stat="identity" stat_identity()
3,计数
stat图层中有两种计数方式:
- stat_count() :不需要分箱,计算每个x位置的数量,适用于离散或连续的x轴数据;
- stat_bin():通过把x轴分箱并计算每个箱中的观测数量,适用于连续的x轴数据。
分箱计数转换默认的几何图形是bar,常用于直方图(geom_histogram(stat = "bin")中:
stat_bin(mapping = NULL, data = NULL, geom = "bar", position = "stack", ..., binwidth = NULL, bins = NULL, center = NULL, boundary = NULL, breaks = NULL, closed = c("right", "left"), pad = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
参数注释:
- geom:指定几何图层;
- bins:分箱的数量,默认值是30;
- binwidth:分箱的宽度
- breaks:数值向量,指定分箱的分割点
- closed:有效值是right和left,用于指定分箱的区间是右边关闭,还是左边关闭。
计数转换的定义,默认值是条形图,常用于条形图(geom_bar(stat = "count"))中:
stat_count(mapping = NULL, data = NULL, geom = "bar", position = "stack", ..., width = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
4,加和
stat_summary()用于在唯一的x值上求y值的加和,stat_summary_bin()用于对分箱的x值,求y值的加和。
stat_summary_bin(mapping = NULL, data = NULL, geom = "pointrange", position = "identity", ..., fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), bins = 30, binwidth = NULL, breaks = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_summary(mapping = NULL, data = NULL, geom = "pointrange", position = "identity", ..., fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
5,椭圆转换
常用于散点图,把尽量多的散点包裹在椭圆中:
stat_ellipse(mapping = NULL, data = NULL, geom = "path", position = "identity", ..., type = "t", level = 0.95, segments = 51, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
参数注释:
- type :类型,默认值是t, 用于散点的t分布,norm 用于散点的正态分布,euclid绘制半径等于level的圆,
- level:水平, 默认值是0.95,用于表示绘制椭圆的置信度,或者,如果type =“euclid”,则表示绘制圆的半径。
- segments:绘制椭圆使用的段数量
二,位置调整图层
位置调整(Position adjustment)有多种实现方式:
- identity:不调整
- dodge:垂直方向不调整,只调整水平位置
- dodge2:时dodge的特例,可以有变化的宽度
- nudge:在一定的范围内调整水平和垂直位置
- jitter:抖动,当具有离散位置和相对较少的点数时,抖动很有用
- jitterdodge:同时jitter和 dodge
- stack:堆叠
- fill:填充,用于条形图
每个位置调整都对应一个函数position_xxx()。
1,不调整位置
position="identity" position=position_identity()
2,dodge调整(避开)
dodge保留垂直方向,而调整水平方向。dodge2是dodge的特例,用于组织箱线图(box plot)、条形图(bar plot)和矩形图(rectangle),可以设置可变的宽度。
position_dodge(width = NULL, preserve = c("total", "single")) position_dodge2(width = NULL, preserve = c("total", "single"), padding = 0.1, reverse = FALSE)
参数注释:
preserve:有效值是total和single,如果设置为total表示避开一个位置上的所有元素的总宽度,single表示避开一个位置上单个元素的宽度。
3,jitter调整(抖动)
在一定的范围内抖动调整,移动的位置是随机的:
position_jitter(width = NULL, height = NULL, seed = NA)
4,jitterdodge调整
该模式是dodge和jitter的组合,同时进行抖动和避开调整
position_jitterdodge(jitter.width = NULL, jitter.height = 0, dodge.width = 0.75, seed = NA)
5,nudge调整(移动)
该模式把位置移动特定的距离,移动的距离是已知的:
position_nudge(x = 0, y = 0)
6,stack调整(堆叠)
用于条形图,堆叠调整是使多个条形图堆叠起来,而填充调整是每个条形图堆叠,并使其都具有相同的高度:
position_stack(vjust = 1, reverse = FALSE) position_fill(vjust = 1, reverse = FALSE)
参考文档: