view chromeister/bin/plot_diags.R @ 0:7fdf47a0bae8 draft

Uploaded
author alvarofaure
date Wed, 12 Dec 2018 07:18:40 -0500
parents
children
line wrap: on
line source

#!/usr/bin/env Rscript
args = commandArgs(trailingOnly=TRUE)

if(length(args) < 1){
  stop("USE: Rscript --vanilla plot.R <matrix>")
}


path_mat = args[1]




data <- as.matrix(read.csv(path_mat, sep = " "))
percentage <- 0.1




d <- col(data) - row(data)
groups <- split(data, d)
acum <- c()
for(i in 1:length(groups)){
  acum <- c(acum, sum(unlist(groups[i])))
}


# reverse
data_r <- data
for(i in 1:length(data_r[,1])){
  data_r[i,] <- rev(data_r[i,])
}
d <- col(data_r) - row(data_r)
groups <- split(data_r, d)
acum_r <- c()
for(i in 1:length(groups)){
  acum_r <- c(acum, sum(unlist(groups[i]))/length(unlist(groups[i])) )
}

indexes <- matrix(0, nrow=length(acum), ncol = 3)
indexes[,1] <- c(1:length(acum))
indexes[,2] <- acum

#sort
indexes[order(indexes[,2], decreasing=TRUE),]

#crop by percentage
n_percent <- percentage * length(acum)

for(i in 1:n_percent){
  indexes[i,3] <- 1
}

# Now resort based on first column to have them again in order
indexes[order(indexes[,1], decreasing=FALSE),]


# same in reverse
#put into indexes to sort
indexes_r <- matrix(0, nrow=length(acum_r), ncol = 3)
indexes_r[,1] <- c(1:length(acum_r))
indexes_r[,2] <- acum_r

#sort
indexes_r[order(indexes_r[,2], decreasing=TRUE),]

#crop by percentage
n_percent <- percentage * length(acum_r)

for(i in 1:n_percent){
  indexes_r[i,3] <- 1
}

# Now resort based on first column to have them again in order
indexes_r[order(indexes_r[,1], decreasing=FALSE),]




finalmat <- matrix(0, nrow=length(data[,1]), ncol=length(data[1,]))


for(i in length(data[1,]):1){
  x <- i
  y <- 1

  if(indexes[i,3] == 1){
    while(x < length(data[1,]) && y <= length(data[,1])){
      
      
      if(x < length(data[1,]) && y <= length(data[,1])){
        finalmat[x,y] <- 1  
      }
      
      y <- y + 1
      x <- x + 1
      
      
    }  
  }
  
}

for(i in 2:length(data[,1])){
  x <- 1
  y <- i
  
  if(indexes[i,3] == 1){
    
    while(x < length(data[1,]) && y <= length(data[,1])){
      
      if(x < length(data[1,]) && y <= length(data[,1])){
        finalmat[x,y] <- 1
      }
      y <- y + 1
      x <- x + 1
      
    }  
  }
}


#same for reverse
for(i in length(data_r[1,]):1){
  x <- i
  y <- 1
  
  if(indexes[i,3] == 1){
    while(x < length(data_r[1,]) && y <= length(data_r[,1])){
      
      
      if(x < length(data_r[1,]) && y <= length(data_r[,1])){
        finalmat[x,length(data_r[,1])-y] <- 1  
      }
      
      y <- y + 1
      x <- x + 1
      
      
    }  
  }
  
}

for(i in 2:length(data_r[,1])){
  x <- 1
  y <- i
  
  if(indexes[i,3] == 1){
    
    while(x < length(data_r[1,]) && y <= length(data_r[,1])){
      
      if(x < length(data_r[1,]) && y <= length(data_r[,1])){
        finalmat[x,length(data_r[,1])-y] <- 1
      }
      y <- y + 1
      x <- x + 1
      
    }  
  }
}

# fully write last

for(i in 1:length(data[,1])){
  for(j in 1:length(data[1,])){
    if(finalmat[i,j] == 0){
      
      data[i,j] <- 0
    }
  }
}

png(paste(path_mat, ".png", sep=""), width = length(data[,1]), height = length(data[,1]))
image((data), col = grey(seq(1, 0, length = 256)), xaxt='n', yaxt='n')
dev.off()