Facets
分面,可以按照一个或多个变量拆分数据,并将子数据集绘制在子图上。
There are three types of faceting:
facet_null()
: 默认,不分面.facet_grid()
: 仅限按照1个或2个变量拆分数据,不可以设置每行的子图数。facet_wrap()
: 拆分数据之后,子图从左到右依次排列,可以设置每行的子图数。
# 1. facet_grid
facet_grid
函数的使用方式: plot + facet_grid(vertical ~ horizontal)
, 子图的排列取决于公式。
library(ggplot2)
sp <- ggplot(reshape2::tips, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1)
# Divide by levels of "sex", 垂直排列
sp + facet_grid(sex ~ .)
# Divide by levels of "sex", 水平排列
sp + facet_grid(. ~ sex)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
同时使用2个变量分面:
# Divide with "sex" vertical, "day" horizontal
sp + facet_grid(sex ~ day)
1
2
2
# 2. facet_wrap
facet_wrap
与 facet_grid
使用方法类似,可以指定每行的子图数。
# Divide by day, going horizontally and wrapping with 3 columns
sp + facet_wrap( ~ day, ncol=3)
1
2
2
# 3. 修改分面标签外观
使用theme修改分面的标签, 主题元素包括 strip.text
, strip.background
等。
sp + facet_grid(sex ~ day) +
theme(strip.text.x = element_text(size=8, angle=75),
strip.text.y = element_text(size=12, face="bold"),
strip.background = element_rect(colour="red", fill="#CCCCFF"))
1
2
3
4
2
3
4
# 4. 修改分面标签文本
可以通过修改原始数据来修改文本,但这样比较繁琐;
此外,可以使用labeller
修改分面文本内容
labels <- c(Female = "Women", Male = "Men")
sp + facet_grid(. ~ sex, labeller=labeller(sex = labels))
1
2
2
# 5. 独立标尺
通常,每个子图上的轴刻度是固定的,这意味着它们具有相同的大小和范围。通过将 scales
设置为 ·free
、free_x
或 free_y
,可以使它们独立。
# A histogram of bill sizes
hp <- ggplot(tips, aes(x=total_bill)) + geom_histogram(binwidth=2,colour="white")
# Histogram of total_bill, divided by sex and smoker
hp + facet_grid(sex ~ smoker)
# Same as above, with scales="free_y"
hp + facet_grid(sex ~ smoker, scales="free_y")
# With panels that have the same scaling, but different range (and therefore different physical sizes)
hp + facet_grid(sex ~ smoker, scales="free", space="free")
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
编辑 (opens new window)
上次更新: 2021/07/20, 10:35:05