1. 若干问题
1.1 分面和拼图的适用范围
分面:数据在一张表格上,存在若干个分类变量可以给数据分组,这时可以使用分面;
拼图:已经产生了多个图(对象),需要拼在一起
1.2 facet_grid()和facet_wrap()的差异
facet_grid()本质是二维; facet_wrap()本质是一维
1.3 分面标签如何调整角度
1.4 并列与分面的比较
分面的一个优势是通过scales, space可以控制构图,见图7.9
2. facet_grid()
mpg2 <- filter(mpg,mpg$cyl != 5 & mpg$drv %in% c("4","f"))
#不分面
ggplot(mpg2,aes(x=cty,y=hwy))+geom_point()+facet_null()
#一行多列
mpg2%>%ggplot(aes(cty,hwy))+geom_point()+facet_grid(.~mpg2$cyl)
#一列多行
mpg2%>%ggplot(aes(cty))+geom_histogram(binwidth = 2)+facet_grid(mpg2$cyl~.)
#多行多列
mpg2%>%ggplot(aes(cty,hwy))+geom_point()+facet_grid(mpg2$drv~mpg2$cyl)
2.1 边际图(与列联表效果类似)
ggplot(mpg2,aes(cty,hwy))+geom_point()+geom_smooth(aes(color=drv),method = "lm",se=F)+
facet_grid(drv ~ cyl,margins = T)
#facet_grid(mpg2$drv ~ mpg2$cyl,margins = T) #不行
3. facet_wrap()
封装分面(对于单个多水平变量非常有用,比如染色体数量)
ggplot(diamonds,aes(x=diamonds$carat,y=..density..))+geom_histogram()+
facet_wrap(.~diamonds$cut, ncol = 2)
4. 两个参数
4.1 标度控制scales
可选"fixed","free","free_x", "free_y"
分面之后,如果panel之间的x或y范围差异大可以加上
library(reshape2)
em <- melt(economics,id="date")
em%>%ggplot(aes(date,value))+geom_line(aes(color=em$variable))
em%>%ggplot(aes(date,value))+geom_line()+
facet_grid(variable ~ .,scales = "free_y")
4.2 space(facet_grid才有)
可选:"fixed","free","free_x", "free_y"
以free_x为例,每列的宽度与该列的标度范围成比例
mpg3 <- within(mpg2, {
model <- reorder(model, cty)
manufacturer <- reorder(manufacturer, -cty)
}) #这种内在的排序可以学习一下
models <- ggplot(mpg3,aes(cty,model))+geom_point()
models
models+facet_grid(manufacturer~.,scales = "free",space = "free")
5. 对于连续型变量如何进行分面?
首先需要将其转换为离散型(这种思想在https://mp.weixin.qq.com/s/N5QU3X8IgKdVbOBjwpmcPg写到过)
cut_interval(x,length = 1)#控制每部分的长度一致,这里长度都是1
cut_interval(x,n=10)#划分为n个长度相同的部分, 值域除以n为每部分的范围
cut_number(x,n=10)#划分为n个有(大概)相同数目点的部分
mpg2$displ_ww <- cut_interval(mpg2$displ,length = 1)
mpg2$displ_wn <- cut_interval(mpg2$displ,n=6)
mpg2$displ_nn <- cut_number(mpg2$displ,n=6)
plot <- ggplot(mpg2,aes(cty,hwy))+geom_point()+labs(x=NULL,y=NULL)
plot+facet_wrap(~displ_ww,nrow = 1)
plot+facet_wrap(~displ_wn,nrow = 1)
plot+facet_wrap(~displ_nn,nrow = 1)