作者:Li_Yuhui
四川大学研究生在读
本文是ggplot2_可视化_速成的第4节
第2节:coor_xxx()坐标系变换
第3节:scale_xxx()
标度调整
第5节:Guides图例与增加坐标轴
第6节:themes主题系统
facet_xxx()
分面系统
分面有2种函数:
facet_grid()
网格分面facet_wrap()
封装分面,自动分成2x4, 3x2等版块
表达式:facet_grid(rows = NULL, cols = NULL, scales = "fixed", labeller = "label_value", facets)
facet_wrap(facets, nrow = NULL, labeller = "label_value",strip.position = "top")
参数解释:- rows 表示要进行行分面的变量,如rows = vars(drv)表示将变量drv作为维度进行行分面,可以使用多个分类变量
- cols 表示要进行列分面的变量,如cols = vars(drv)表示将变量drv作为维度进行列分面,可以使用多个分类变量
- scales 表示分面后坐标轴适应规则,下面会介绍
- facets 表示将哪些变量作为维度进行分面,,在网格分面中,尽量不使用,而使用rows和cols参数
网格分面:varname.按变量varname行分面;.varname按变量varname列分面; varname1 ~ varname2 表示按varname1行分,varname2列分
封装分面:~variable,或var(variable),可以使用多个变量 - nrow 表示封装分面排列时行数目
- labeller 表示指定分面标题内容,分为:"label_value"只显示分面变量值,"label_both"显示分面变量名称和变量值,
显示字符串及特殊字符,可以线增加特殊字符变量,然后按该变量分面,使用labeller = label_parsed
将特殊字符解析出来,
用labeller = label_bquote()
指定显示数学公式 - strip.position 表示指定分面标题放置位置,分为: "top"顶部,"bottom"底部
坐标轴参数:
scale= |
描述 |
---|---|
“free” | free所有坐标轴,坐标轴刻度及比例完全分开,不统一 |
“fixed” | fixed,固定所有坐标轴,所有分面坐标轴都相同 |
“free_x” | free_x仅y轴为共同坐标轴,x轴自适应 |
“free_y” | free_y仅x轴为共同坐标轴,y轴自适应 |
高维facets分面: varname1 + varname2 + varname3 + … + varnameN ~ Varname1 + Varname2 + Varname3 + …+ VarnameN
封装分面示例
library(ggplot2)
p <- ggplot(mpg, aes(displ, hwy)) + geom_point()
p + facet_wrap(vars(class)) # 封装分面,使用class变量作为分面维度
p + facet_wrap( ~ class) # 与上面一样
p + facet_wrap(vars(class), nrow = 4) # 重新排列分面,分4行排
p + facet_wrap(vars(cyl, drv)) # 高维分面,按cyl和drv两个变量分面
p + facet_wrap(c("cyl", "drv"), labeller = "label_both") # 更改分面标题内容,显示分面变量名和变量值
p + facet_wrap(~class, scales = "free") # 更改facets方式,设定x轴自适应
p + facet_wrap(~class, scales = "free_y", nrow = 2, strip.position = "bottom") # 设定y轴自适应,2行排列,分面标题置于底部
网格分面示例:
library(ggplot2)
p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p + facet_grid(rows = vars(drv)) # 以drv变量行分面
p + facet_grid(cols = vars(cyl)) # 以cyl变量列分面
p + facet_grid(vars(drv), vars(cyl)) # 同时行分面和列分面
p + facet_grid(. ~ cyl) # 更改facets方式,以cyl列分面
p + facet_grid(drv ~ .) # 以drv变量行分面
p + facet_grid(drv ~ cyl) # 以drv变量行分,以cyl变量列分
mg <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point()
mg + facet_grid(vs + am ~ gear, scales = "free_y") # 高维分面,y轴自适应
labeller特殊字符分面标题
library(ggplot2)
# label_parsed解析
mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "gamma"))# 新增一个特殊字符向量
p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
p + facet_grid(. ~ cyl2, labeller = label_parsed) # label_parsed解析
# label_bquote数学公式
p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
p + facet_grid(. ~ vs, labeller = label_bquote(cols = .(vs) ^ .(vs))) # 变量指数形式显示