plot_panel_CR.r 4.8 KB

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