《r语言绘图:多图叠加和图形分页》由会员分享,可在线阅读,更多相关《r语言绘图:多图叠加和图形分页(11页珍藏版)》请在金锄头文库上搜索。
1、R绘图课程:多图叠加与图形分页gaom在我们用R画图的时候常常碰到一种问题,就是我们简简单单一个对象的图无法达到我们想要的结果。可能我们是一个对象但有多种展示,需要把多个图放在一起。也可能我们要画的是多个对象,但每个对象的图其实都是并行的。前面一种情况我理解为是多图叠加,即需要多张不同的图拼凑到一张图中。后面的情况我理解为是图形分页,即把类似的图形有序的排列展示给大家看。今天我们讨论的主题就是如何去解决上述的两种情况。首先,我们针对第一种情况。其实第一种情况我们还是要划分一下。多图叠加,其中的叠是指我们的绘图中两张或多张不同的图整合到一种图中,共用一个坐标轴。比如一张柱状图,一张曲线图合并到一
2、张图中。而其中的加则是指我们想合并的图之间无法共用坐标轴,我们只能在一张图中划分不同的区域加需要的多张图放置进去。光说不练假把式,今天我们就找几个实例展示一下,让大家看下我们如果处理这种常见的问题。library(ggplot2)#这次主要是用ggplot来处理data-read.table(file = C:/Users/gaom/Desktop/R语言绘图:多图叠加和图形分页/test_data2.txt,header=F,stringsAsFactors=F,sep = t)#因为文件中有数字也有字符,所以建议加上stringsAsFactors=F。head(data)# V1 V2
3、V3 V4# 1 1 0.15415052 0.7645350 A# 2 2 0.09278940 0.7763482 A# 3 3 0.01666104 0.8422627 A# 4 4 0.01519319 0.7630589 A# 5 5 0.16605095 0.8263706 A# 6 6 0.13892152 0.7597543 Adim(data)# 1 48 4第一列是染色体名,第二列和第三列分别是两种计算结果,具体意义暂时不予理会。第四列是染色体的区域,100000表示1到100000,200000表示100001到200000。我们大致知道数据结构即可。下面我们开始画图p1
4、-ggplot(data)+geom_bar(aes(x=data$V1,y=data$V3,fill = data$V4,group = data$V4),position = dodge,stat = identity,colour = black)+scale_x_continuous(breaks = 1:12)#加上position=dodge后会每条染色体分成四个柱子,加上colour = black,则每个柱子的边框为黑色。p1 上面已经有对应的柱状图了,下面再根据第一列和第三列画点线图。p2-ggplot(data)+geom_line(aes(x=data$V1,y=data
5、$V2,colour = data$V4)+scale_x_continuous(breaks = 1:12)#这里可以注意跟柱状图不一样了,用的是colour,不是fill。p2分开的两张图我们都做好了,下面就是叠加了。首先我们看到这里的数据其实都是data,换句话说就是他们其实可以共用坐标轴的。所以这种情况在ggplot当中叠起来很容易。data,5=whitep3-ggplot(data)+geom_bar(aes(x=data$V1,y=data$V3,group = data$V4),fill = data$V5,position = dodge,stat = identity,co
6、lour = black)+geom_line(aes(x=data$V1,y=data$V2,colour = data$V4)+scale_x_continuous(breaks = 1:12)#为了能看到线图,所以这里把填充颜色改成了白色,这里大家注意一下fill的位置,跟之前的fill运用有些区别p3这里说完了叠,再说说加。下面我们就简单的把上面两张图加到一张图中。library(gridExtra)grid.arrange(p1,p2,ncol = 2,widths=c(1,1)#widths表示横向两图的比例grid.arrange(p1,p2,nrow = 2,heights =
7、 c(1,2)#heights表示两图纵向的比例grid.arrange(p1,p2,p1,p2,ncol =2,nrow =2)#ncol和nrow表示图形摆放方式grid.arrange(p1,p2,p1,p2,ncol =2,layout_matrix = cbind(c(1,1,1), c(2,3,4)#layout_matrix中的1,2,3,4分别对应前面四个对象 除了上述情况,相信大家还会碰到另外一种,比如上述四个图拼在一起。而我们只有三个图,可能右上角或左上角是空白的。这个怎么办呢?kong- ggplot()+geom_blank(aes(1,1)+ theme(plot.b
8、ackground = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.border = element_blank(), panel.background = element_blank(),axis.title.x = element_blank(), axis.title.y = element_blank(),axis.text.x = element_blank(), axis.text.y = element_blank(),axis.tick
9、s = element_blank(), axis.line = element_blank()#这里其实就是建立了一个完全空白的图片grid.arrange(p2,kong,p1,p2,ncol =2 ,nrow =2,widths = c(2,1),heights = c(1,2)上述了这些就是一般常见的图层叠加了。当然,如果大家还想发散的话,可以再参考一些ggExtra这个包,你会发现更多乐趣。好了,除了刚才的叠加,下面我们再说说分页。这方面在ggplot中就显得很容易了。p4-ggplot(data)+geom_bar(aes(x=data$V1,y=data$V3,fill = da
10、ta$V4,group = data$V4),position = dodge,stat = identity,colour = black)+scale_x_continuous(breaks = 1:12)+facet_grid(V4)#这是根据分组来分页的p4p5-ggplot(data)+geom_bar(aes(x=data$V1,y=data$V3,fill = data$V4,group = data$V4),position = dodge,stat = identity,colour = black)+scale_x_continuous(breaks = 1:12)+fac
11、et_wrap(V1,ncol = 3)#这个是根据染色体的,同时也能通过ncol和nrow来调控布局p5facet_grid相对facet_wrap而言可以应用多个标准进行分页。但从布局角度个人觉得facet_wrap更好。p6-ggplot(data)+geom_bar(aes(x=data$V1,y=data$V3,fill = data$V4,group = data$V4),position = dodge,stat = identity,colour = black)+scale_x_continuous(breaks = 1:12)+facet_grid(V1V4)#这是根据分组来分页的p6