======简介====== 客户需要进行全部染色体cnv的可视化。 目前流程不支持性染色体的可视化,需要补充。 ======功能====== cnv的可视化。 ======数据准备====== **1. cnv的检测结果:** *ratio.txt.slim *BAF.txt.slim **2. 可视化:** Rscript cnv_profile.R **cnv_profile.R :** ## initializations and default values setwd("./") chrNum = 22 ploidy <- 2 # chromosome length, centromere position chrLen<-c(249250621,243199373,198022430,191154276,180915260,171115067,159138663,146364022,141213431,135534747,135006516,133851895,115169878,107349540,102531392,90354753,81195210,78077248,59128983,63025520,48129895,51304566,155270560,59373566) names(chrLen)<-c(1:chrNum,'X','Y') centromere=c(125000000,93300000,91000000,50400000,48400000,61000000,59900000,45600000,49000000,40200000,53700000,35800000,17900000,17600000,19000000,36600000,24000000,17200000,26500000,27500000,13200000,14700000,60600000,12500000) ## execution names(centromere)<-c(1:chrNum,'X','Y') cumChrLen<-c(0,cumsum(chrLen))[-length(chrLen)] names(cumChrLen)<-c(1:chrNum,'X','Y') cumCen<-cumChrLen+centromere names(cumCen)<-c(1:chrNum,'X','Y') chrNum <- 24 #20210610 files <-read.table("./slim.config",sep=" ") png(filename = paste("ET203897",".CNV_profile.png",sep = ""),width=2400*2,height=nrow(files)*960*2,type="cairo-png",res=288*2) par(mfrow=c(nrow(files)*2+2,1),mar=c(0.3,2,0.3,5)) plot(1:10,rep(0,10),col='white',bty='n',xaxt='n',yaxt='n',xlab='',ylab='',ylim=c(0,6)) text(5,2,"ET203897",cex=1.5) #par(mfrow=c(2,1),mar=c(0.3,2,0.3,5)) for(j in 1:nrow(files)){ ### CNV profile par(mar=c(0,2,0.3,5)) cat("Reading CNV file ... ") ratio <-read.table(as.character(files[j,2]), head=TRUE,sep=" ") maxLevelToPlot <- 3 for (i in c(1:length(ratio$Ratio))) { if (ratio$Ratio[i]>maxLevelToPlot) { ratio$Ratio[i]=maxLevelToPlot; } } ratio2<-subset(ratio,as.character(Chromosome) %in% c(1:chrNum,"X","Y"))#20210610 ratio2$x<-cumChrLen[as.character(ratio2$Chromosome)]+ratio2$Start ratio2$color<-"darkolivegreen3" ratio2$color[ratio2$CopyNumber>2]<-"firebrick3" ratio2$color[ratio2$CopyNumber<2]<-"mediumblue" print(1) #20210610 # plot(ratio2$x,ratio2$Ratio*2,xlim = c(0,cumChrLen[chrNum+1]),ylim = c(0,maxLevelToPlot*ploidy),xlab = "",ylab = "",pch = ".",col = ratio2$color,bty='n',xaxt='n',yaxt='n') plot(ratio2$x,ratio2$Ratio*2,xlim = c(0,cumChrLen[chrNum]),ylim = c(0,maxLevelToPlot*ploidy),xlab = "",ylab = "",pch = ".",col = ratio2$color,bty='n',xaxt='n',yaxt='n') #20210610 print(2) #20210610 points(ratio2$x,ratio2$CopyNumber,cex=1.2,pch = ".",col = colors()[24]) #plot(ratio2$x,ratio2$Ratio*2,ylim = c(0,maxLevelToPlot*ploidy),xlab = "",ylab = "",pch = ".",col = ratio2$color,bty=']',xaxt='n',yaxt='n') #axis(side=2,line=-0.95,at=0:6,labels=0:6,col='darkgrey',xpd=NA) segments(0,-0.1,0,6.1,lwd=1,xpd=T) for (i in 1:(chrNum)){ #20210610 segments(cumChrLen[i],0.5,cumChrLen[i],5.5,lwd=1,lty=22,col="darkgrey") } for (i in 0:6){ segments(-20000000,i,0,i,xpd=T) text(-10000000,i,i,pos=2,adj=0,xpd=T,cex=0.8,lwd=0.8) } ## centromere text(cumCen[1:chrNum],rep(2,chrNum),labels=rep(".",chrNum),cex=2,adj=0) #text(cumCen[1:chrNum],rep(2,chrNum),labels=rep(".",chrNum),cex=2) text(cumCen[1:chrNum],rep(2.05,chrNum),labels=rep(".",chrNum),cex=2,adj=0) text(cumCen[1:chrNum],rep(2.03,chrNum),labels=rep(".",chrNum),cex=2,adj=0) text(cumCen[1:chrNum],rep(1.98,chrNum),labels=rep(".",chrNum),cex=2,adj=0) text(cumCen[1:chrNum],rep(1.95,chrNum),labels=rep(".",chrNum),cex=2,adj=0) mtext(side=2,line=0,"Copy Number",cex=0.5) ### BAF BAF<-read.table(as.character(files[j,3]),head=TRUE,sep=" ") BAF2<-subset(BAF,Chromosome %in% 1:chrNum) BAF2$x<-cumChrLen[as.character(BAF2$Chromosome)]+BAF2$Position BAF2$color<-colors()[1] BAF2$color[BAF2$A==0.5]<-colors()[92] BAF2$color[BAF2$A!=0.5 & BAF2$A>=0]<-colors()[62] par(mar=c(0.3,2,0,5)) plot(BAF2$x,BAF2$BAF,ylim = c(-0.1,1.1),xlab = "",ylab = "",pch = ".",col = BAF2$color,bty='n',xaxt='n',yaxt='n') for (i in 1:chrNum){ lBAF<-subset(BAF2,Chromosome==i) tt<-1 pres<-1 if (length(lBAF$FittedA)>4){ for (n in c(2:(length(lBAF$FittedA)-pres-1))) { if (lBAF$FittedA[n]==lBAF$FittedA[n+pres]) { tt[length(tt)+1] <- n } } points(lBAF$x[tt],lBAF$FittedA[tt],pch = ".",col = colors()[24],cex=1.2) points(lBAF$x[tt],lBAF$FittedB[tt],pch = ".",col = colors()[24],cex=1.2) } } segments(0,-0.02,0,1.02,lwd=1,xpd=T) for (i in 2:(chrNum+1)){ segments(cumChrLen[i],0,cumChrLen[i],1,lwd=1,lty=22,col="darkgrey") } for (i in seq(0,1,by=0.2)){ segments(-20000000,i,0,i,xpd=T,lwd=0.8) text(-10000000,i,i,pos=2,adj=0,xpd=T,cex=0.8) } ## sample label if(nrow(files)>1){ text(cumChrLen[chrNum+1]*1,0.95,as.character(files[j,1]),xpd=T,cex=1.0,pos=4,adj=0) } mtext(side=2,line=0,"BAF",cex=0.5) } print(3) #20210610 #plot(cumChrLen[1:chrNum], rep(0,chrNum), xlim = c(0,cumChrLen[chrNum+1]),ylim = c(0,maxLevelToPlot*ploidy), col='white',bty='n',xaxt='n',yaxt='n',xlab='',ylab='') plot(cumChrLen[1:chrNum], rep(0,chrNum), xlim = c(0,cumChrLen[chrNum]),ylim = c(0,maxLevelToPlot*ploidy), col='white',bty='n',xaxt='n',yaxt='n',xlab='',ylab='')#20210610 print(4) #20210610 #text(cumCen[1:chrNum],5.7+c(rep(0,12),rep(c(-0.1,-0.3),5)),labels=1:chrNum,xpd=T,cex=0.8) text(cumCen[1:chrNum],5.7+c(rep(0,12),rep(c(-0.1,-0.3),5)),labels=names(chrLen),xpd=T,cex=0.8) #20210610 #cumChrLen dev.off() # pdf plot pdf(paste("ET203897",".CNV_profile.pdf",sep = ""),width=600*7/480,height=nrow(files)*120*7/480) par(mfrow=c(nrow(files)*2+2,1),mar=c(0.3,2,0.3,5)) plot(1:10,rep(0,10),col='white',bty='n',xaxt='n',yaxt='n',xlab='',ylab='',ylim=c(0,6)) text(5,2,"ET203897",cex=1.5) #par(mfrow=c(2,1),mar=c(0.3,2,0.3,5)) for(j in 1:nrow(files)){ ### CNV profile par(mar=c(0,2,0.3,5)) cat("Reading CNV file ... ") ratio <-read.table(as.character(files[j,2]), head=TRUE,sep=" ") maxLevelToPlot <- 3 for (i in c(1:length(ratio$Ratio))) { if (ratio$Ratio[i]>maxLevelToPlot) { ratio$Ratio[i]=maxLevelToPlot; } } # ratio2<-subset(ratio,Chromosome %in% 1:chrNum) ratio2<-subset(ratio,as.character(Chromosome) %in% c(1:chrNum,"X","Y")) #add20210610 ratio2$x<-cumChrLen[as.character(ratio2$Chromosome)]+ratio2$Start ratio2$color<-"darkolivegreen3" ratio2$color[ratio2$CopyNumber>2]<-"firebrick3" ratio2$color[ratio2$CopyNumber<2]<-"mediumblue" # plot(ratio2$x,ratio2$Ratio*2,xlim = c(0,cumChrLen[chrNum+1]),ylim = c(0,maxLevelToPlot*ploidy),xlab = "",ylab = "",pch = ".",col = ratio2$color,bty='n',xaxt='n',yaxt='n') plot(ratio2$x,ratio2$Ratio*2,xlim = c(0,cumChrLen[chrNum]),ylim = c(0,maxLevelToPlot*ploidy),xlab = "",ylab = "",pch = ".",col = ratio2$color,bty='n',xaxt='n',yaxt='n') #add20210610 points(ratio2$x,ratio2$CopyNumber,cex=1.2,pch = ".",col = colors()[24]) #plot(ratio2$x,ratio2$Ratio*2,ylim = c(0,maxLevelToPlot*ploidy),xlab = "",ylab = "",pch = ".",col = ratio2$color,bty=']',xaxt='n',yaxt='n') # axis(side=2,line=-0.95,at=0:6,labels=0:6,col='darkgrey',xpd=NA) segments(0,-0.1,0,6.1,lwd=1,xpd=T) # for (i in 2:(chrNum+1)){ for (i in 1:(chrNum)){ #add20210610 segments(cumChrLen[i],0.5,cumChrLen[i],5.5,lwd=1,lty=22,col="darkgrey") } for (i in 0:6){ segments(-20000000,i,0,i,xpd=T) text(-10000000,i,i,pos=2,adj=0,xpd=T,cex=0.8,lwd=0.8) } ## centromere text(cumCen[1:chrNum],rep(2,chrNum),labels=rep(".",chrNum),cex=2,adj=0) #text(cumCen[1:chrNum],rep(2,chrNum),labels=rep(".",chrNum),cex=2) text(cumCen[1:chrNum],rep(2.05,chrNum),labels=rep(".",chrNum),cex=2,adj=0) text(cumCen[1:chrNum],rep(2.03,chrNum),labels=rep(".",chrNum),cex=2,adj=0) text(cumCen[1:chrNum],rep(1.98,chrNum),labels=rep(".",chrNum),cex=2,adj=0) text(cumCen[1:chrNum],rep(1.95,chrNum),labels=rep(".",chrNum),cex=2,adj=0) mtext(side=2,line=0,"Copy Number",cex=0.5) ### BAF BAF<-read.table(as.character(files[j,3]),head=TRUE,sep=" ") BAF2<-subset(BAF,Chromosome %in% 1:chrNum) BAF2$x<-cumChrLen[as.character(BAF2$Chromosome)]+BAF2$Position BAF2$color<-colors()[1] BAF2$color[BAF2$A==0.5]<-colors()[92] BAF2$color[BAF2$A!=0.5 & BAF2$A>=0]<-colors()[62] par(mar=c(0.3,2,0,5)) plot(BAF2$x,BAF2$BAF,ylim = c(-0.1,1.1),xlab = "",ylab = "",pch = ".",col = BAF2$color,bty='n',xaxt='n',yaxt='n') for (i in 1:chrNum){ lBAF<-subset(BAF2,Chromosome==i) tt<-1 pres<-1 if (length(lBAF$FittedA)>4){ for (n in c(2:(length(lBAF$FittedA)-pres-1))) { if (lBAF$FittedA[n]==lBAF$FittedA[n+pres]) { tt[length(tt)+1] <- n } } points(lBAF$x[tt],lBAF$FittedA[tt],pch = ".",col = colors()[24],cex=1.2) points(lBAF$x[tt],lBAF$FittedB[tt],pch = ".",col = colors()[24],cex=1.2) } } segments(0,-0.02,0,1.02,lwd=1,xpd=T) for (i in 2:(chrNum+1)){ segments(cumChrLen[i],0,cumChrLen[i],1,lwd=1,lty=22,col="darkgrey") } for (i in seq(0,1,by=0.2)){ segments(-20000000,i,0,i,xpd=T,lwd=0.8) text(-10000000,i,i,pos=2,adj=0,xpd=T,cex=0.8) } ## sample label if(nrow(files)>1){ text(cumChrLen[chrNum+1]*1,0.95,as.character(files[j,1]),xpd=T,cex=1.0,pos=4,adj=0) } mtext(side=2,line=0,"BAF",cex=0.5) } #plot(cumChrLen[1:(chrNum+1)], rep(0,chrNum+1), xlim = c(0,cumChrLen[chrNum+1]),ylim = c(0,maxLevelToPlot*ploidy), col='white',bty='n',xaxt='n',yaxt='n',xlab='',ylab='') plot(cumChrLen[1:(chrNum+1)], rep(0,chrNum+1), xlim = c(0,cumChrLen[chrNum]),ylim = c(0,maxLevelToPlot*ploidy), col='white',bty='n',xaxt='n',yaxt='n',xlab='',ylab='') #20210610 #text(cumCen[1:chrNum],5.7+c(rep(0,12),rep(c(-0.1,-0.3),5)),labels=1:chrNum,xpd=T,cex=0.8) text(cumCen[1:chrNum],5.7+c(rep(0,12),rep(c(-0.1,-0.3),5)),labels=names(chrLen),xpd=T,cex=0.8) #cumChrLen dev.off() 示例路径: /TJNAS01/AFS_RESEQ/Proj/hongxiang/05.AFS/freec_visualization/test_X_Y