plot_IDTWES_CR.r 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #setwd("D:/scripts/IDTWES_CNV/plot_20201120/")
  2. rm(list=ls())
  3. library(RColorBrewer)
  4. library(ggplot2)
  5. library(plyr)
  6. library(gridExtra)
  7. args<- commandArgs(TRUE)
  8. sample<-args[1]
  9. #sample<-"CG316V3459-Lib7839"
  10. max_ratio<-3.4
  11. chrOrder<-c(1:22,'X','Y')
  12. col= brewer.pal(9,"Greys")[c(7,4)]
  13. samdata<-read.table(file=paste(sample,"_plot.tsv",sep=''),sep="\t",header=TRUE,as.is=TRUE)
  14. names(samdata)<-c('chrom','start','end','Name','PTN','TN','Seg')
  15. samdata$nPTN<-2**samdata$PTN
  16. samdata$nPTN[samdata$nPTN> max_ratio]<-max_ratio
  17. samdata$nTN<-2**samdata$TN
  18. samdata$nSeg<-samdata$Seg
  19. samdata$nSeg[samdata$nSeg> max_ratio]<-max_ratio
  20. samdata$chrom<-sub('chr','',samdata$chrom,ignore.case=TRUE)
  21. samdata$chrom<-factor(samdata$chrom,levels=chrOrder)
  22. data12<-arrange(samdata,chrom,start)
  23. chr_probe<-data.frame(chr=names(table(samdata$chrom)),
  24. counts=as.vector(table(samdata$chrom)) )
  25. chr_probe<-chr_probe[chr_probe$counts>0,]
  26. count<-chr_probe$counts
  27. num<-dim(data12)[1]
  28. snpdata<-read.table(file=paste(sample,".ps.tab.xls",sep=''),sep="\t",header=TRUE,as.is=TRUE)
  29. names(snpdata)<-c('chrom','Pos','Ref','Alt','Other','AF','VAFadj','ROH')
  30. snpdata<-snpdata[snpdata$Ref+snpdata$Alt>40,]
  31. snpdata<-snpdata[snpdata$AF>0.3 & snpdata$AF<0.7,]
  32. #snpdata$VAF=snpdata$Alt/(snpdata$Alt+snpdata$Ref+snpdata$Other)
  33. snpdata$VAF=round(snpdata$Alt/(snpdata$Alt+snpdata$Ref), 3)
  34. snpdata$chrom<-sub('chr','',snpdata$chrom,ignore.case=TRUE)
  35. snpdata$chrom<-factor(snpdata$chrom,levels=chrOrder)
  36. snpdata<-arrange(snpdata,chrom,Pos)
  37. chr_snp<-data.frame(chr=names(table(snpdata$chrom)),
  38. counts=as.vector(table(snpdata$chrom)) )
  39. chr_snp<-chr_snp[chr_snp$counts>0,]
  40. snp_cnt<-chr_snp$counts
  41. snp_num<-dim(snpdata)[1]
  42. roh<-factor(snpdata$ROH,levels=unique(snpdata$ROH))
  43. roh_snp<-data.frame(ROH=unique(roh),
  44. counts=as.vector(table(roh)) )
  45. roh_cnt<-roh_snp$counts
  46. cum<-function(x){
  47. if(length(x)==1){
  48. return(x[1])
  49. }
  50. a<-as.vector(x[1])
  51. for (i in 2:length(x)){
  52. a[i]<-a[i-1]+x[i]
  53. }
  54. return(a)
  55. }
  56. cum0<-function(x){
  57. if(length(x)==1){
  58. return(1)
  59. }
  60. a<-(1)
  61. for (i in 2:length(x)){
  62. a[i]<-a[i-1]+x[i-1]
  63. }
  64. return(a)
  65. }
  66. cum_mid<-function(x){
  67. if(length(x)==1){
  68. return(round(x[1]/2))
  69. }
  70. a<-as.vector(round(x[1]/2))
  71. for ( i in 2:length(x)){
  72. a[i]<-cum(x)[i-1] + round(x[i]/2)
  73. }
  74. return(a)
  75. }
  76. gene_xys<-function(x){
  77. x_genes<-c()
  78. y_genes<-c()
  79. for (i in 1:length(x)){
  80. name<-x[i]
  81. x_genes[i]<-max( as.numeric(row.names(gene[gene$Name==name,])) )
  82. ymin<-min(gene[gene$Name==name,'Seg'])
  83. if(ymin < 0.6){
  84. y_genes[i]<-max(ymin-0.2,0)
  85. }else{
  86. y_genes[i]<-min(ymin+0.2,1.9)
  87. }
  88. }
  89. return(data.frame(xpos=x_genes,ypos=y_genes))
  90. }
  91. reg.data<-data.frame(
  92. x=cum0(count),
  93. xend=cum(count),
  94. y=rep(-0.05,length(count)),
  95. yend=rep(-0.05,length(count)),
  96. alpha=rep(c(0.5,0),length(count))[1:length(count)],
  97. stringsAsFactors = FALSE
  98. )
  99. cols<-rep(col,length(count))[1:length(count)]
  100. gene<-data12[data12$Seg>1.4 |data12$Seg< 0.6,]
  101. if(dim(gene)[1]==0){
  102. gene_label<-c('')
  103. gene_pos<-data.frame(xpos=c(0),ypos=c(0))
  104. }else{
  105. gene_label<-names(table(gene$Name))
  106. gene_pos<-gene_xys(gene_label)
  107. }
  108. reg.snp<-data.frame(
  109. x=cum0(snp_cnt),
  110. xend=cum(snp_cnt),
  111. y=rep(-0.03,length(snp_cnt)),
  112. yend=rep(-0.03,length(snp_cnt)),
  113. alpha=rep(c(0.5,0),length(snp_cnt))[1:length(snp_cnt)],
  114. stringsAsFactors = FALSE
  115. )
  116. reg.roh<-data.frame(
  117. x=cum0(roh_cnt),
  118. xend=cum(roh_cnt),
  119. y=rep(-0.03,length(roh_cnt)),
  120. yend=rep(0,length(roh_cnt)),
  121. alpha=ifelse(substr(roh_snp$ROH,1,3)=='ROH',1,0),
  122. col_roh<-brewer.pal(9,"RdBu")[ifelse(substr(roh_snp$ROH,1,3)=='ROH',2,6)],
  123. stringsAsFactors = FALSE
  124. )
  125. snp_cols<-rep(col,length(snp_cnt))[1:length(snp_cnt)]
  126. pdf(file=paste(sample,'.CR_VAF.pdf',sep=''),width = 8,height = 4.5)
  127. p1<-ggplot(data=data12 ) +
  128. geom_rect(data = reg.data,aes(xmin=x, xmax=xend, alpha=alpha), ymin= -Inf,
  129. ymax= Inf, fill= brewer.pal(9,"Greys")[2],color= "NA",size= 2) +
  130. geom_point(stat="identity",size=0.05,aes(x=1:num,y=nPTN)) +
  131. geom_hline(aes(yintercept=1),color='steelblue2',size=1.5) +
  132. ylim(-0.1,max(data12$nPTN,1.8)+0.1) +xlab("Probe")+ylab("Copy Ratio")+
  133. scale_x_continuous(breaks=cum_mid(count),labels=chr_probe$chr,
  134. expand = c(0.002,0.002) ) +
  135. geom_point(aes(x=1:num,y=nSeg),size=0.1,colour="red") +
  136. geom_segment(aes(x=x,xend=xend,y=y,yend=yend),data=reg.data,color=cols,size=1) +
  137. # annotate("text",x=gene_pos$xpos,y=gene_pos$ypos,label=gene_label,size=2,color='steelblue1')+
  138. theme(axis.text.x=element_text(angle=330,size=8),
  139. axis.text.y=element_text(size=8),
  140. axis.ticks = element_line(size = 0.2),
  141. axis.ticks.length=unit(.05, "cm"),
  142. panel.background = element_rect(fill = "transparent",colour = NA),
  143. legend.position = "none")
  144. p2<-ggplot(data=snpdata ) +
  145. geom_rect(data = reg.snp,aes(xmin=x, xmax=xend, alpha=alpha), ymin= -Inf,
  146. ymax= Inf, fill= brewer.pal(9,"Greys")[3],color= "NA",size= 2) +
  147. geom_rect(data = reg.roh,aes(xmin=x, xmax=xend, alpha=alpha,color=col_roh), ymin= -Inf,
  148. ymax= Inf, fill= col_roh,color= "NA",size= 2) +
  149. geom_point(stat="identity",size=0.05,aes(x=1:snp_num,y=VAF)) +
  150. ylim(-0.03,max(snpdata$VAF,1)+0.02) +xlab("SNP")+ylab("VAF")+
  151. scale_x_continuous(breaks=cum_mid(snp_cnt),labels=chr_snp$chr,
  152. expand = c(0.002,0.002) ) +
  153. theme(axis.text.x=element_text(angle=330,size=8),
  154. axis.text.y=element_text(size=8),
  155. axis.ticks = element_line(size = 0.2),
  156. axis.ticks.length=unit(.05, "cm"),
  157. panel.background = element_rect(fill = "transparent",colour = NA),
  158. legend.position = "none")
  159. #geom_segment(aes(x=x,xend=xend,y=y,yend=yend),data=reg.snp,color=snp_cols,size=1) +
  160. grid.arrange(p2, p1)
  161. dev.off()