1、R语言绘图多图叠加和图形分页R绘图课程:多图叠加与图形分页gaom在我们用R画图的时候常常碰到一种问题,就是我们简简单单一个对象的图无法 达到我们想要的结果。可能我们是一个对象但有多种展示,需要把多个图放在一 起。也可能我们要画的是多个对象,但每个对象的图其实都是并行的。前面一种情 况我理解为是多图叠加,即需要多张不同的图拼凑到一张图中。后面的情况我理解 为是图形分页,即把类似的图形有序的排列展示给大家看。今天我们讨论的主题就 是如何去解决上述的两种情况。首先,我们针对第一种情况。其实第一种情况我们还是要划分一下。多图叠加,其 中的叠是指我们的绘图中两张或多张不同的图整合到一种图中,共用一个坐
2、标轴。比如一张柱状图,一张曲线图合并到一张图中。而其中的加则是指我们想合并的图 之间无法共用坐标轴,我们只能在一张图中划分不同的区域加需要的多张图放置进 去。光说不练假把式,今天我们就找几个实例展示一下,让大家看下我们如果处理这种 常见的问题。library (ggplot2 )#这次主要是用ggplot 来处理datav- read.table (file = C:/Users/gaom/Desktop/R 语言绘图:多图叠加和图形分页/test_data2.txt , header= F, stringsAsFactors= F, sep = t )#因为文件中有数字也有字符,所以建议加上
3、stringsAsFactors=F 。head (data)# V1 V2 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,20000
4、0表示100001到 200000。我们大致知道数据结构即可。下面我们开始画图p1- 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 ,则每个柱子的边框为黑色。P1data SV 1data$
5、V4对应的柱状图了,下面再根据第一列和第三列画点线图p2v-ggplot (data)+ geom_line (aes (x=data$V1, y=data$V2, colour = cale_x_co ntin uous (breaks = 1:12) #这里可以注意跟柱状图不一样了,r,不是 fill op2上面已经有data$V4)+ s 用的是 colou0.4-o.o-1 2 3 + 5 C 7 8 9 10 11 12data$V1分开的两张图我们都做好了,下面就是叠加了。首先我们看到这里的数据其实都是 data,换句话说就是他们其实可以共用坐标轴的。所以这种情况在 ggplot当
6、中叠起来很容易。data, 5= whitep3 I i i i I I R I iScDdataSV4 a0cD况,相信大家还会碰到另外一种,dataSV4A除了上述情 比如上述四个图拼在一起。而我们只有三个图,0 8-0 40.30 20 1 -1234567931012data$V1I I I I I I I II I I I I1234567091012 dataSV!0 6-J21234567891012dataSV!12345678J1012 dataSV!可能右上角或左上角是空白的。这个怎么办呢?kong- ggplot ()+ geom_blank (aes(1,1)+them
7、e (plot.background = element_blank (), panel.grid.major = element_blan k(),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_b
8、lank (), axis.ticks = element_blank (),axis.line = element_blank () #这里其实就是建立了一个完全空白的图片grid.arrange (p2,kong,p1,p2, ncol = 2 , nrow = 2, widths = c( 2, 1), heights = c(1,2)EASE 冷 Poo-dataSV40.30 20 1-o.o-吕cDdata$V10.8-0 6-.4-o z-12 3 4 5 6 7 8 9 101112data$V1BDdata$V1dataSV4岛BGD3常肓p上述了这些就是一般常见的图层叠加了
9、。当然,如果大家还想发散的话,可以再参 考一些ggExtra这个包,你会发现更多乐趣。好了,除了刚才的叠加,下面我们再说说分页。这方面在 ggplot中就显得很容易了。p4- 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 (V4) #这是根据分组来分页的p4p5-g
10、gplot (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_wrap (V1, ncol = 3) #这个是根据染色体的,同时也能通过ncol和nrow来调控布局p50 642 o咄dstaSV4B11AmcD1 I I I I I I I I I I1234567891012data$V15
11、B864 20864 201 2345 6789101210123455709101212facet_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_c ontinu ous (breaks =1:12)+ facet_grid (V1V4) #这是根据分组来分 页的D D0nDnanDno0DDDDD0Dni i i i 11 i i 11dataSV4ABCDI I I i I I I1234557901 12123789t1t2data$V1n i123456759 M2