分面也就是切割数据生成一系列小联号图,每一个小图表示不一样的数据子集。本篇将讨论如何较好的微调分面,特别是与位置标度相近的方法。3d
在qplot中能够选择分面系统。2维分面使用face_grid,1维分面使用face_wrap。blog
分面一般会占用大量空间,所以本篇使用mpg数据集的子集来进行展现。element
> library(ggplot2) > mpg2 <- subset(mpg,cyl != 5 &drv %in% c("4","f"))
1.网格分面it
网格分面在2维网格中展现图形,输入分面表达式时,你须要设定哪些变量做为分面绘图的行,哪些变量做为列,规则以下:io
> qplot(cty,hwy,data=mpg2) + facet_null()
电脑屏幕一般较宽,所以这个方向最合适数据的展现。另外,由于坐标轴相同,这个方向也有助于y位置的比较。class
qplot(cty,hwy,data=mpg2) + facet_grid(. ~ cyl)
横坐标轴相同,利于x位置的比较,尤为是对数据分布的比较。变量
> qplot(cty,data=mpg2,geom="histogram",binwidth=2) + facet_grid(cyl ~ .)
咱们一般都将因子水平数目最大的变量按列排放,这样能够充分利用屏幕的宽高比。date
> qplot(cty,hwy,data=mpg2) + facet_grid(drv ~ cyl)
从以上图形咱们能够看出,变量在某行或者某列一块儿出现时,图形只会展现数据中出现的变量组合。而变量在行和列都出现时,图形将展现全部变量组合,包括原始数据中都没有出现的组合。不过这也可能会致使出现空白面板。grid
边际图:能够参考margins来绘制边际图。设定margins=TRUE可展现全部的边际图,或者margins=c("sex","age"),列出你要展现的边际图的变量名称。也可使用grand_row或grand_col来生成行或列的边际图。技巧
边际图的分组方式与其余面板中分组方式相同:默认使用图层中全部分类变量的交互做用。下面第三张图表示对每一个驱动类型添加彩色平滑线。
> p <- qplot(displ,hwy,data=mpg2) + geom_smooth(method = "lm",se=F) > p + facet_grid(cyl ~ drv) > p + facet_grid(cyl ~ drv,margins = T)
> qplot(displ,hwy,data=mpg2) + geom_smooth(aes(colour=drv),method="lm",se=F)+
+ facet_grid(cyl ~ drv,margins=T)
2.标度控制
对于上述分面,能够经过调整参数scales来控制面板的位置标度是固定的仍是容许变化的。
下面展现了固定标度与自由标度间的差别:
> library(ggplot2) > p <- qplot(cty,hwy,data=mpg) > p + facet_wrap(~ cyl) ##下图左 每一个分面中固定标度即横纵坐标范围相同 > p + facet_wrap(~ cyl,scales="free") ##下图右 自由标度即横纵坐标范围可变 >
固定标度可让咱们在相同的基准上对子集进行比较,观察在哪些地方各子集有类似的整体模式。而自由标度能够帮助咱们发现更多细节,它在展现不一样量纲的时间序列时很是有用。
> library(reshape2) > em <- melt(economics,id = "date") > qplot(date,value,data=em,geom="line",group=variable)+ + facet_grid(variable~.,scale="free_y") >
上图展现了自由标度在展现不一样量纲的时间序列时很是有用。
3.分组与分面
与经过调整图形属性不一样(好比颜色、形状或大小)来分组分组不一样,分面提供了另一种分组途径。依据子集相对位置的不一样,这两种绘图技巧都有相应的优缺点。
在分面图形中,每一个组别都在单独的面板中,相隔较远,组间无重叠。所以组与组之间重叠严重时,分面图形有必定的好处。不过这也会致使组间的细微差异难以被发现。使用图形属性区分各组时,各组将会离得很近甚至可能重叠,不过细微得差异将会容易被发现。下图展现了二者优缺点得互补。
> library(ggplot2) > xmaj <- c(0.3,0.5,1,3,5) > xmin <- as.vector(outer(1:10,10^c(-1,0))) > ymai <- c(500,1000,5000,10000) > ymin <- as.vector(outer(1:10,10^c(2,3,4))) > dplot <- ggplot(subset(diamonds,color %in% c("D","E","G","J")),aes(carat,price,colour=color)) + + scale_x_log10(breaks = xmaj,labels = xmaj,minor = xmin)+ + scale_y_log10(breaks=ymai,labels=ymai,minor=ymin)+ + scale_colour_hue(limits = levels(diamonds$color))+ + theme(legend.position="none") > dplot + geom_point()
> dplot + geom_point()+facet_grid(.~color)
> dplot + geom_smooth(method=lm,se=F,fullrange=T)
> dplot + geom_smooth(method=lm,se=F,fullrange=T)+facet_grid(.~color)
在散点图中,仅使用颜色区分各组,咱们可能还没注意到图形重叠了,可是回归线却可让咱们看到D、E、和G被分组在一块儿,与J组相距甚远。
4.并列与分面
分面可绘制出与图形并列相似得图形效果。
> qplot(color,data=diamonds,geom="bar",fill=cut,position="dodge") ##并列 > qplot(cut,data=diamonds,geom="bar",fill=cut)+facet_grid(.~color)+ + theme(axis.text.x=element_text(angle=90,hjust=1,size=8,colour="grey50")) ##分面
除标注方式外,当两个变量得因子水平几乎彻底交叉,而部分变量组合缺失时,两种绘图方式也就会有所不一样。此时,并列图形得用处不大,由于它只是对条形局部地分割,没有任何标签。而分面就实用不少,它能控制分割方式时局部得仍是全局得。