R 分面

有时候会有需求需要把一个数据框的数据作图,再按照不同的分类将图形分开绘制。或者,只是需要把2个或者多个图简单地放在一个画布上,R图的分面将会作用与此。

facet_grid

ggplot2的facet_grid()函数按分类条件将图形在行或者列上分面绘图。

1
2
3
4
5
6
7
> p <- ggplot(mpg, aes(displ, cty)) + geom_point()
> p + facet_grid(rows = vars(drv)) #按行分面
> p + facet_grid(cols = vars(cyl)) #按列分面
> p + facet_grid(vars(drv), vars(cyl)) #使用2个变量同时在行列分面

> mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +geom_point() #按cyl填充颜色
> mt + facet_grid(cols = vars(cyl), scales = "free") #scales = "free"刻度在在分面上可自适应

facet_wrap

ggplot2的facet_wrap()函数按分类条件将图形2d(默认n x n)形式的铺在画布上。

1
2
3
4
5
6
> p <- ggplot(mpg, aes(displ, hwy)) + geom_point()
> p + facet_wrap(vars(class)) #按class分面
> p + facet_wrap(vars(class), nrow = 4) #强制分为4行
> p + facet_wrap(vars(class), ncol = 4) #强制分为4列
> p + facet_wrap(vars(cyl, drv)) #使用2个变量进行分类
> p + facet_wrap(c("cyl", "drv"), labeller = "label_both") #友好的显示分类变量名

grid.arrange

grid.arrange()是gridExtra包的一个函数,可以将多个图放入一个画布中。

1
2
3
4
5
6
7
8
> install.packages("gridExtra")
> library(gridExtra)
> p1<-ggplot(mpg, aes(displ, hwy)) + geom_point()
> p2<-ggplot(mpg, aes(displ, hwy)) + geom_point()
> p3<-ggplot(mpg, aes(displ, hwy)) + geom_point()
> grid.arrange(p1,p2,p3, nrow=2) #设定为2行图形
> grid.arrange(p1,p2,p3, nrow=2,top = textGrob("xxx",gp=gpar(col="red",fontsize=20,font=2)))
#设置总标题,并修改颜色大小,字体