第 31 章 ggplot2之延迟映射
本章是翻译的ggplot的官方文档,后续我会增加一些案例
绝大部分时候,数据框的变量直接映射到图形元素,然后生成图片。但也有一些时候,变量需要先做统计变换,然后再映射给图形元素,这个过程称之为延迟映射。
ggplot2 把进行数据映射分成了三个阶段。
- 第一个阶段,拿到数据之后。最初阶段,拿到用户提供的数据,映射给图形元素。
- 第二个阶段,统计变换之后。数据完成转化或者统计计算之后,再映射给图形元素。
- 第三个阶段,图形标度之后。数据完成标度配置之后,映射给图形元素,在最后渲染出图之前。
延迟到统计变换之后的例子是,在geom_histogram()
画柱状图的时候,
柱子的高度并不直接来源用户提供的数据,而是来源于stat_bin()
函数统计计算后的结果
penguins %>%
ggplot(aes(x = bill_length_mm)) +
geom_histogram(aes(y = after_stat(count)))
# Scale tallest bin to 1
penguins %>%
ggplot(aes(x = bill_length_mm)) +
geom_histogram(aes(y = after_stat(count) / max(count)))
延迟到图形标度之后的例子是,geom_bar()
画柱子图,定义了柱子的颜色后,想在颜色的基础上增加点透明度,作为柱子的填充色。
penguins %>%
ggplot(aes(x = species, color = species)) +
geom_bar(
aes(fill = after_scale(alpha(color, 0.6)))
)
如果不是直接使用原始数据,而是用统计变换后的数据来映射,就需要使用after_stat()
函数告诉ggplot2 等到统计变换完成后再做美学映射。类似地,如果想在完成标度配置之后,再映射给图形元素,就需要使用after_scale()
函数。如果多次映射图形元素,比如变量 x
先传递给统计函数,然后把统计结果映射给图形元素,就需要使用
stage(start = NULL, after_stat = NULL, after_scale = NULL)
控制每一个过程。