r语言的绘图功能及应用案例


R语言的绘图功能及应用案例 深圳华大基因研究院 闻博 wenbo@genomics.org.cn 2012年03月15日 主要内容 一、基础绘图工具 1. 绘图函数 2. 绘图参数介绍 3. 画图面板分割 4. 图形保存 二、图形案例 三、其它图形包 一、基础绘图工具 1. 绘图函数 2. 绘图参数介绍 3. 画图面板分割 4. 图形保存 一、基础绘图工具 1. 绘图函数 在R中有两种绘图函数: 1.1 高级绘图函数 创建一个新的图形 1.2 低级绘图函数 在现有的图形上添加元素 > demo(graphics) > demo(persp) 一、基础绘图工具 1. 绘图函数 1.1 高级绘图函数 创建一个新的图形 函数名 功能 plot(x) 以x的元素值为纵坐标、以序号为横坐标绘图 plot(x,y) x与y的二元作图 pie(x) 饼图 boxplot(x) 盒形图(也称箱线图) hist(x) x的频率直方图 barplot(x) x的值的条形图 pairs(x) 如果x是矩阵或是数据框,作x的各列之间的二元图 coplot(x~y|z) 关于z的每个数值(或数值区间)绘制x与y的二元图 matplot(x,y) 二元图,其中x的第一列对应y的第一列,依次类推 qqnorm(x) 正态分位数-分位数图 image(x,y,z) x,y,z三元图 heatmap(x) 热图 一、基础绘图工具 1. 绘图函数 1.2 低级绘图函数 在现有的图形上添加元素 函数名 功能 points(x,y) 添加点 lines(x,y) 添加线 text(x,y,labels,…) 在(x,y)处添加用labels指定的文字 mtext(text,side=3,line=0,…) 在边空添加用text指定的文字 segments(x0,y0,x1,y1) 从(x0,y0)各点到(x1,y1)各点画线段 arrows(x0,y0,x1,y1,...) 同上,但添加箭头 abline(a,b) 绘制斜率为b和截距为a的直线 abline(h=y) 在纵坐标y处画水平线 abline(v=x) 在横坐标x处画垂直线 abline(lm.obj) 画出lm.obj确定的回归线 rect(x1,y1,x2,y2) 绘制长方形,(x1,y1)为左下角,(x2,y2)为右上角 polygon(x,y) 绘制连接各x,y坐标确定的点的多边形 legend(x,y,legend) 在点(x,y)处添加图例,说明内容由legend给定 title() 添加标题,也可添加一个副标题 axis(side,vect) 画坐标轴 box() 在当前的图上加边框 rug(x) 在x轴上用短线画出x数据的位置 locator(n,type=“n“,…) 获取鼠标在图中点击处的坐标 一、基础绘图工具 2. 绘图参数介绍  高级绘图函数共同参数选项: 选项 功能 add=FALSE 如果是TRUE,叠加图形到前一个图上(如果有的话) axes=TRUE 如果是FALSE,不绘制轴与边框 type=“p“ 指定图形的类型,“p”:点,“l”:线,“b”:点连线,“o”:同 上,但是线在点上,“h”:垂直线,“s”:阶梯式,垂直线顶 端显示数据,“S”:同上,但是垂直线底端显示数据 xlim=,ylim= 指定轴的显示范围 xlab=,ylab= 坐标轴的标签 main= 主标题 sub= 副标题 axes type= “o“ ylim=c(20,100) xlim=c(7,20) 一、基础绘图工具 2. 绘图参数介绍  高级绘图函数共同参数选项: xlab ylab main sub 一、基础绘图工具 2. 绘图参数介绍  高级绘图函数共同参数选项: > plot(cars,font.lab=2,main=“主标题“,sub=“副标题“,type=“p“,xlim=c(7,20),ylim=c(20,100)) > plot(cars,font.lab=2,main=“主标题“,sub=“副标题“,type=“p“,xlim=c(7,20),ylim=c(20,100),axes=F) 一、基础绘图工具 2. 绘图参数介绍  高级绘图函数共同参数选项: plot(cars,font.lab=2,type=“p“) plot(cars,font.lab=2,type=“l“) plot(cars,font.lab=2,type=“b“) plot(cars,font.lab=2,type=“o“) plot(cars,font.lab=2,type=“h“) plot(cars,font.lab=2,type=“s“) plot(cars,font.lab=2,type=“S“) 一、基础绘图工具 2. 绘图参数介绍  其它常用绘图参数 > help(par) 参数 功能 adj 控制关于文字对齐方式 bg 背景色 bty 图形边框形状 cex 符号和文字大小,cex.axis,cex.lab,cex.main,cex.sub col 颜色,col.axis,col.lab,col.main,col.sub font 文字字体,font.axis,font.lab,font.main,font.sub las 坐标轴刻度数字标记方向 lty 连线的线性 lwd 线的宽度 mar 图形边空的大小 mfcol, mfrow c(nr,nc)的向量,前者按列分隔绘图窗口,后者按行分隔绘图窗口 pch 绘图符号的类型 ps 文字大小 pty 绘图区域类型 tck 轴刻度长度,tck=1时,则绘制grid xaxt, yaxt 如果xaxt=“n”,设置x轴不显示,如果yaxt=“n”,设置y轴不显示 一、基础绘图工具 2. 绘图参数介绍  其它常用绘图参数 > help(par) par(mgp=c(1.6,0.6,0),mar=c(3,3,2,1)) X=1:10;Y=1:10 cex_type=c(0.7,0.8,0.9,1,2,3,4,5,6,7) plot(X,Y,col=“blue“,pch=16, cex=cex_type, #绘图符号大小,1是正常大小 cex.axis=1.1, #坐标轴刻度数字大小 cex.lab=1.2, #坐标轴标签大小 cex.main=1.4, #标题文字大小 #cex.sub=1.3, #副标题文字大小 font.axis=3, #坐标轴刻度数字字体,斜体 font.lab=2, #坐标轴标签字体,粗体 font.main=4, #标题字体,粗斜体 #font.sub=1, #副标题字体,正常 main=“字体“, xlim=c(1,12),ylim=c(1,12)) text(X,Y,adj=0,labels=paste(“cex=“,cex_type),col=“red“,cex=1.2,font=3) 一、基础绘图工具 2. 绘图参数介绍  其它常用绘图参数 > help(par)  R的绘图符号:pch=1:25  R的绘图符号:任意字符 par(mgp=c(1.6,0.6,0),mar=c(3,3,2,1)) pch_type=c(1:5,15:19) X=1:10;Y=rep(6,10) plot(X,Y,col=1,pch=pch_type,cex=2,main=“pch“,font.lab=2) text(X,Y ,adj=-0.5,labels=paste(“pch=“,pch_type),srt=90) 注:背景色bg参数只对符号21-25有作用 一、基础绘图工具 2. 绘图参数介绍  其它常用绘图参数 > help(par)  颜色名称:white, black, red, yellow,… colors()  数字代号:1, 2, 3, 4, 5, 6, 7, 8  颜色函数: rainbow, heat.colors, terrain.colors, topo.colors, cm.colors, colors() par(mgp=c(1.6,0.6,0),mar=c(3,3,2,1)) pch_type=c(1:5,15:19) X=1:10;Y=rep(6,10) plot(X,Y,col=1:10,pch=pch_type,cex=2,main=“pch“,font.lab=2) text(X,Y,col=1:10,adj=-0.5,labels=paste(“pch=“,pch_type),srt=90) 一、基础绘图工具 2. 绘图参数介绍  其它常用绘图参数 > help(par)  控制连线的类型: lty 1: 实线,2: 虚线,3: 点线,4: 点虚线, 5: 长虚线,6: 双虚线)  控制线的宽度: lwd 1为正常大小,<1 为减小宽度,>1为增 加宽度 par(mgp=c(1.6,0.6,0),mar=c(3,3,2,1)) X=1:10;Y=1:10 line_type=c(1:6) line_width=seq(from=0.6,by=0.6,length=6) plot(X,Y,col=“blue“,pch=16,type=“n“,main=“line type and line width“,font.lab=2,cex.lab=1.2) abline(h=3:8,lty=line_type,col=colors()[120:126],lwd=line_width) text(3:8,3:8,adj=0,labels=paste(“lty=“,line_type,“,lwd=“,line_width),col=“red“,cex=1.2,font=3) 一、基础绘图工具 3. 画图面板分割  在一个面板中画多张图  par中参数mfrow和mfcol # par(mfrow=c(2,2)) > source(“mfrow.R“)  layout函数 生成复杂的图形排列 layout(mat, widths = rep(1, ncol(mat)), heights = rep(1, nrow(mat)), respect = FALSE) > source(“layout.R“)  其它函数 ?split.screen 一、基础绘图工具 3. 画图面板分割  在一个面板中画多张图 图形边距控制: > par(mar=c(5, 4, 4, 2) + 0.1) > par(mai=c(bottom, left, top, right)) > par(oma=c(bottom, left, top, right)) > par(mgp=c(3, 1, 0)) 一、基础绘图工具 4. 图形保存  输出到屏幕  windows, X11 > windows() > X11()  输出到文件  pdf , postscript , xfig, bitmap, pictex, cairo_pdf, svg, png, jpeg, bmp, tiff > pdf(“plot.pdf“,width=4,height=4) > png(“plot.png“,width=400,height=600) > dev.off() #绘制完图形后关闭图形设备 > dev.list()  通过菜单命令保存图形 二、图形案例 > require(stats) > head(cars) speed dist 1 4 2 2 4 10 3 7 4 4 7 22 5 8 16 > plot(cars[,1],cars[,2],pch=16, col=“red“,xlab=“speed“, ylab=“dist“,type=“p“,font.axis=2, font.lab=2,cex.lab=1.5) > x=seq(5,25,by=0.1); y=10*sin(x)+50 > lines(x,y,col=“green“,lwd=2) > a=5:25; b=2*a+10*cos(a) > points(a,b,pch=15,col=“blue“) > legend(“topleft”,pch=c(16,-1,15),lty=c(-1,1,-1),col=c(“red”,”green“,“blue“), legend=c(“plot with point“,“lines“,“points“)) 二、图形案例 1. 散点图——点线混合图 a=read.table(“acgt.txt”,head=T) matplot(a,type=“o“,pch=15:18,lty=1,bg=“yellow“,lwd=2, xlab=“Position(nt)“,ylab=“Frequency“,font=2,font.lab=2,cex.lab=1.5) legend(“topright“,pch=15:18,lty=1,merge=T,legend=names(a),col=1:4) A C G T/U 01 0.0598 0.0661 0.0843 0.7899 02 0.1853 0.2443 0.4650 0.1055 03 0.2502 0.3082 0.2883 0.1533 04 0.2706 0.2511 0.2729 0.2054 05 0.3416 0.2185 0.2311 0.2087 06 0.3066 0.1810 0.2836 0.2288 07 0.2755 0.1939 0.2791 0.2515 08 0.2656 0.1955 0.2904 0.2485 09 0.2641 0.2157 0.2771 0.2431 10 0.3257 0.1909 0.2497 0.2337 11 0.2666 0.2097 0.2809 0.2428 12 0.2698 0.2114 0.2783 0.2404 13 0.2558 0.2101 0.2830 0.2511 14 0.2526 0.2175 0.2915 0.2383 二、图形案例 1. 散点图——并列散点图 a=read.table(“replicate_experiment_sRNA.txt“, head=T) plot(a[,2],a[,3],log=“xy“,cex.lab=1.4, cex.axis=1.2,font.lab=2,font.axis=2, xlab=“R1“,ylab=“RS“,pch=“.“, col=“red“,cex=1.1,axes=F) axis(1,at=axTicks(1),labels=as.integer(axTicks(1))) axis(2,at=axTicks(2),labels=as.integer(axTicks(2))) title(main=“R1 VS RS”) box() Tag R1 RS TCACAGTGAACCGGTCTCTTT 865675 928052 AGAGGTAGTAGGTTGCATAGTT 626013 217111 TCACAGTGAACCGGTCTCTTTT 477772 550406 TGAGGTAGTAGGTTGTATGGTT 382274 1042548 TGAGGTAGTAGGTTGTATAGTT 344486 867512 TGAGGTAGTAGGTTGTATG 339670 497223 TAGCACCATCTGAAATCGGTTA 284477 282668 TGAGGTAGTAGATTGTATAGTT 226382 1153877 TAAGGCACGCGGTGAATG 160081 268658 TGAGGTAGTAGGTTGTATGGTTT 148549 283490 二、图形案例 1. 散点图——坐标对数化 > a<-read.table(“lengthVSnumber.txt“) > #pdf(“lengthVSnumber.pdf“) >bar=barplot(a[,2],ylim=c(0,1.2*max(a[,2])), cex.lab=1.5,names.arg=a[,1], xlab=“Length(nt)“,font.lab=1.5, ylab=“Number of small RNAs“, space=0.9,col=“blue“, main=“Length distribution“) >ratio=paste(sprintf(“%.2f“, a[,2]/sum(a[,2])*100),“%“,sep=““) > text(bar,a[,2],labels=ratio,adj=c(0.5,0), cex=0.8,font=2,pos=3) > abline(h=axTicks(2),lty=2,col=rgb(0,0,0,0.5)); > box() 18 272336 19 435222 20 1266132 21 2005966 二、图形案例 2. 条形图——标准条形图 h =read.table(“acgt.txt”,head=T) barplot(t(as.matrix(h)),ylim=c(0,1),xlab=“Position“, ylab=“Frequency“,main=“Homo sapiens “, col=rainbow(4),font=2,cex.lab=1.4) box() legend(“topright“,legend=c(“A“,“G“,“C“,“T“), pch=15,col=rainbow(4)) A C G T/U 01 0.0598 0.0661 0.0843 0.7899 02 0.1853 0.2443 0.4650 0.1055 03 0.2502 0.3082 0.2883 0.1533 04 0.2706 0.2511 0.2729 0.2054 05 0.3416 0.2185 0.2311 0.2087 06 0.3066 0.1810 0.2836 0.2288 07 0.2755 0.1939 0.2791 0.2515 08 0.2656 0.1955 0.2904 0.2485 09 0.2641 0.2157 0.2771 0.2431 10 0.3257 0.1909 0.2497 0.2337 11 0.2666 0.2097 0.2809 0.2428 12 0.2698 0.2114 0.2783 0.2404 13 0.2558 0.2101 0.2830 0.2511 14 0.2526 0.2175 0.2915 0.2383 二、图形案例 2. 条形图——堆积条形图 read.table(“fGC.txt“)->fp read.table(“tGC.txt“)->tp table(cut(fp[,2],breaks=seq(0,1,by=0.1)))->fpf table(cut(tp[,2],breaks=seq(0,1,by=0.1)))->tpf data.frame(tpf,fpf)->tfp.gc tfp.gc<-tfp.gc[,c(2,4)] dat<-data.frame(tfp.gc[,1]/sum(tfp.gc[,1]), tfp.gc[,2]/sum(tfp.gc[,2])) row.names(dat)<-seq(0.1,1,by=0.1) a<-barplot(t(as.matrix(dat)),xlab=“GC content“, ylab=“Frequency“, main=“Pre-piRNAs' GC content“, legend=c(“Positive sample“,“Negative sample“), yaxt=“n“,col=c(“green“,“cyan“), ylim=c(0,0.5),beside=T, args.legend=list(bty=“n“,cex=0.8)); sp<-spline(a[1,],dat[,1],n=100) lines(sp$x,sp$y,lwd=2,col=“green“) sp<-spline(a[2,],dat[,2],n=100) lines(sp$x,sp$y,lwd=2,col=“cyan“);box() axis(2,seq(0,0.5,by=0.1),labels=c(“0%“,“10%“,“20%“,“30%“,“40%“,“50%“)) t0 0.5842 t1 0.4752 t2 0.5842 t3 0.3069 t4 0.4554 二、图形案例 2. 条形图——邻接条形图 二、图形案例 2. 条形图——Error Bar条形图  显示均值和标准差的条形图 data(ToothGrowth) head(ToothGrowth) tg.m <-tapply(ToothGrowth$len,ToothGrowth$dose,mean) tg.sd <-tapply(ToothGrowth$len,ToothGrowth$dose,sd) tg<-cbind(tg.m,tg.sd) par(mgp=c(1.6,0.6,0)) bp<- barplot(tg.m,xlab = “Dose“, ylab = “Growth“, cex.lab = 1.5,ylim=c(0,35),space=2,col=1) arrows(bp,tg.m,bp,tg.m+tg.sd,lwd=1.5,angle=90,length=0.1) box() library(plotrix) plot(0:10,seq(0,10,length=11),type=“n“,axes=F,xlab=““,ylab=““) draw.circle(2,5,2,col=rgb(154/255,0/255,205/255,0.6)) draw.circle(4,5,2,col=rgb(21/255,3/255,252/255,0.6)) text(1,5,labels=“10.12%“,col=“white“,font=2) text(5,5,labels=“40.38%“,col=“white“,font=2) text(3,5,labels=“49.5%“,col=“white“,font=2) legend(6.2,5,pch=15, xjust=0,yjust=0.5,bty=“n“,cex=1.3, col=c(rgb(154/255,0/255,205/255),rgb(74/255,2/255,233/255),rgb(21/255,3/255,252/255)), legend=c(“sample 1 uniq“,“sample & sample 2“,“sample 2 uniq“)) text(3.5,7.5,labels=“Venn chart for uniq_sRNAs“,font=2,cex=1.5) 二、图形案例 3. 文氏图 dat=read.table(“pie.txt“) ratio=sprintf(“%.2f“,100*dat[,2]/sum(dat[,2])) ratio=paste(ratio,“%“,sep=““) label=paste(dat[,1],ratio,sep=“\n“) pie(dat[,2],col=1:6,main=“Pie chart for miRNAs uniq“,border=“purple“,labels=label,font=2) miR1 134 miR2 1456 miR3 234 miR4 230 miR5 800 miR6 700 二、图形案例 4. 饼图——二维饼图 dat=read.table(“dat.txt“) ratio=sprintf(“%.2f“,100*dat[,2]/sum(dat[,2])) ratio=paste(ratio,“%“,sep=““) label=paste(dat[,1],ratio,sep=“\n“) pie3D(dat[,2],col=1:6, main=“Pie3D chart for miRNAs uniq“, border=“purple“, labels=label,font=2, labelcex=1,,explode=0.1, radius=0.95) miR1 134 miR2 1456 miR3 234 miR4 230 miR5 800 miR6 700 二、图形案例 4. 饼图——三维饼图 经验分布图 x=c(40.5,20.8,16.9,20.2,17.3,32.4, 34.5,43.6,19.5,26.4,41.4) plot(ecdf(x),verticals=T,col=2, main=“Empirical distribution function x“, font=2,cex.lab=1.5) lines(14:46, pnorm(14:46,mean(x),sd(x)), lwd=2,col=“blue“) 二、图形案例 5. 经验分布图 data=read.table(“pair.txt”,head=T) boxplot(frequncy~pair,data=data, ylab=“Frequncy“, font.lab=2,cex.lab=1.5) frequncy pair 10 C:G/P 16 C:G/P 17 A:U/N 9 A:U/N 14 A:U/P 4 A:U/P 20 C:G/P 16 C:G/P 10 A:U/P 7 C:G/N 箱线图 二、图形案例 6. 盒形图(箱线图) x=rnorm(1000,10,10) x=x[x<0] hist(x,xlim=range(x),xaxs=“i“,yaxs=“i“,m ain=“Hist of MFE“,xlab=“MFE“,nclass=30,freq=F,font =2,cex.lab=1.4) lines(density(x),col=“blue“,lwd=2) lines(-30:0,dnorm(- 30:0,mean(x),sd(x)),col=“red“,lwd=2) legend(-30,0.15,pch=c(15,-1,-1),lty=c(- 1,1,1),col=c(“gray“,“blue“,“red“),legend= c(“Histogram“,“Density line“,“Normal density line“)) 直方图 二、图形案例 7. 频率直方图 QQ图:鉴别样本的分布是否近似于某种类型的分布 x=c(75.0,64.0,47.4,66.9,62.2,62.2,58.7,63.5,66.6,64.0,57.0,69.0,56.9,50.0,72.0) qqnorm(x,pch=21,col=“red“,bg=“yellow“,font=2,cex.lab=1.4);qqline(x,lwd=2,col=“blue“) x=rnorm(200,2,2) qqnorm(x,pch=21,col=“red“,bg=“yellow“,font=2,cex.lab=1.4);qqline(x,lwd=2,col=“blue“) 二、图形案例 8. QQ图 二、图形案例 9. 热图  方法1 x<-read.table(“cluster.txt“,head=T) library(pheatmap) pheatmap(x[,-1],border_color=NA) 二、图形案例 9. 热图  方法2 library(“gplots“) x<-read.table(“cluster.txt“,head=T) heatmap.2(as.matrix(x[1:100,]), col=redgreen(75), cexCol=0.9, key=T, symkey=F, density.info=“none“, trace=“none“, labRow=NA) 二、图形案例 9. 热图  方法3 x<- read.table(“cluster.txt“,head=T) heatmap(as.matrix(x[,-1]), cexCol=0.9, labRow=NA) 二、图形案例 10. 多组图 x<- read.table(“cluster.txt“,head=T) pairs(x[,-1]) 三、其它图形包 gplots ggplot2 lattice
还剩38页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

ysujsp

贡献于2017-03-09

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf