ggplot2 分面相关设置(facet)

总结学习,ggplot 1.0,2.0 后,已经大致画出符合需求的图,并能对坐标轴,图例进行修改。分面画图,和一页多图可以更好的将数据分类展示出来。

分面
分面分成两种网格分面(facet_grid()),封装分面(facet_wrap()).其中都含有两种分面属性:指定分面,分面标度。

指定分面
网格指定分面(矩阵)    写法    理解
一行多列    “. ~ a”    按a分面,行为1,列为length(a),即横向分面
一列多行    “a ~ .”    按照a分面,行为length(a),列为1,即纵向分面
多行多列    “a ~ b”    按照a,b分面,行为length(a),列为length(b)
额外参数    space = “free”    按照图形y轴,或x轴比例,自由分配空间
封装分面指定分面    写法    理解
分面    ~ a+b+c,ncol,nrow    相比于网格,更加手动化。能将图形设置成更加符合自身要求的图
分面标度 
对分面画图坐标进行控制
参数    理解
scales = “fixed”    x和y的标度在所用平面中都相同
scales = “free”    x和y的标度在每个版面都可以变化
scales = “free_x    固定y轴,x轴自由变化
scales = “free_y”    类似,同上
一页多图
在一个页面上自由组合各种图(可以毫无关联),省空间,又能表达自己需求。这里调用gird包.

require(ggplot2)
require(grid)
#####现将图画好,并且赋值变量,储存#####
a <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point()
b <- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point()
c <- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point() + 
  facet_grid(.~color,scale = "free") 

########新建画图页面###########
grid.newpage()  ##新建页面
pushViewport(viewport(layout = grid.layout(2,2))) ####将页面分成2*2矩阵
vplayout <- function(x,y){
  viewport(layout.pos.row = x, layout.pos.col = y)
}
print(c, vp = vplayout(1,1:2))   ###将(1,1)和(1,2)的位置画图c
print(b, vp = vplayout(2,1))   ###将(2,1)的位置画图b
print(a, vp = vplayout(2,2))  ###将(2,2)的位置画图a
#dev.off() ##画下一幅图,记得关闭窗口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


example
超级简单例子,表达的意思都是一样的 不一样的就只是是否分页面.

head(diamonds)
g <- ggplot(diamonds)+
  geom_bar(aes(x = color, fill = cut), position = 'dodge') 
p <- ggplot(diamonds)+
  geom_bar(aes(x = cut, fill = cut), position = 'dodge')+
  facet_grid(.~color)
p;g
1
2
3
4
5
6
7
8
 

————————————————
版权声明:本文为CSDN博主「炫炫有牛腩」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27755195/article/details/45393261

 

 

分面设置在ggplot2应该也是要经常用到的一项画图内容,在数据对比以及分类显示上有着极为重要的作用,

下面是两个经常要用到的分面函数。

facet_wrap(facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, as.table = TRUE, drop = TRUE)

facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, drop = TRUE)

其中facet_wrap和facet_grid不同在于facet_wrap是基于一个因子进行设置,facets表示形式为:~变量(~单元格) 

而facet_grid是基于两个因子进行设置,facets表示形式为:变量~变量(行~列),如果把一个因子用点表示,也可以达到facet_wrap的效果,也可以用加号设置成两个以上变量

例如:变量+变量~变量 的形式,表示对三个变量设置分面。

具体的参数(把两个函数参数和在一起):

nrow,ncol 分面索要设置成的行和列,参数为数值,表示几行或者几列

scales  参数fixed表示固定坐标轴刻度,free表示反馈坐标轴刻度,也可以单独设置成free_x或free_y

shrink  也和坐标轴刻度有关,如果为TRUE(默认值)则按统计后的数据调整刻度范围,否则按统计前的数据设定坐标。

drop    表示是否去掉没有数据的分组,默认情况下不显示,逻辑值为FALSE

as.table   和小图排列顺序有关的选项。如果为TRUE(默认)则按表格方式排列,即最大值(指分组level值)排在表格最后即右下角,否则排在左上角。

margins 通过TRUE或者FALSE表示否设置而一个总和的分面变量,默认情况为FALSE,即不设置

space    表示分面空间是否可以按照数据进行缩放,参数和scales一样

 

下面来看些具体的例子:

 

1

2

3

library(ggplot2)

p<-ggplot(mtcars,aes(mpg,hp))+geom_point()

p

  

1

p+facet_wrap(~cyl)

  

1

p+facet_wrap(~cyl,scales="free")

  

这里把scales 设置成free之后,可以看出每个分面都有自己的坐标刻度,当然我们也可以单独对x轴或y轴设置。

1

p+facet_wrap(~carb,scales="free")

  

1

p+facet_wrap(~carb,scales="free",nrow=1)

  

对nrow设置后的效果图表变得比较拥挤,正常情况下,facet_wrap自然生成的图片都会相对比较好看。

1

p+facet_grid(.~cyl)

  

1

p+facet_grid(vs~cyl)

  

1

p+facet_grid(vs~cyl,scales="free",space="free")

  

从上图可以看出把scales 和space 都设置成free之后,不仅坐标刻度不一样了,连每个分面的大小也不一样了。

1

p+facet_grid(vs~cyl,margins=TRUE)

  

相对于上面一张图,多出一行分面,后面有all的标记,可以看出是对上两行分面的汇总。

相对而言整个分面的设置也相对比较简单。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值