From c6d1260f744d6ac232a7064097a44462f9c2d8e0 Mon Sep 17 00:00:00 2001 From: Tanushree Tunstall Date: Wed, 23 Jun 2021 12:06:41 +0100 Subject: [PATCH] updated logo_plot.R with functions --- scripts/plotting/logo_plot.R | 179 +++++++++++++---------------------- 1 file changed, 65 insertions(+), 114 deletions(-) diff --git a/scripts/plotting/logo_plot.R b/scripts/plotting/logo_plot.R index 7294d8e..facf3fa 100644 --- a/scripts/plotting/logo_plot.R +++ b/scripts/plotting/logo_plot.R @@ -2,43 +2,80 @@ ######################################################### # TASK: producing logoplot # from data and/or from sequence - ######################################################### -#======================================================================= # working dir and loading libraries getwd() setwd("~/git/LSHTM_analysis/scripts/plotting") getwd() source("Header_TT.R") -#library(ggplot2) -#library(data.table) -#library(dplyr) +source("../functions/plotting_globals.R") +source("../functions/plotting_data.R") +source("../functions/combining_dfs_plotting.R") +########################################################### +# command line args +#******************** +drug = 'streptomycin' +gene = 'gid' #=========== # input #=========== -source("combining_dfs_plotting.R") +#--------------------- +# call: import_dirs() +#--------------------- +import_dirs(drug, gene) + +#--------------------------- +# call: plotting_data() +#--------------------------- +if (!exists("infile_params") && exists("gene")){ + #if (!is.character(infile_params) && exists("gene")){ + #in_filename_params = paste0(tolower(gene), "_all_params.csv") + in_filename_params = paste0(tolower(gene), "_comb_afor.csv") # part combined for gid + infile_params = paste0(outdir, "/", in_filename_params) + cat("\nInput file for mcsm comb data not specified, assuming filename: ", infile_params, "\n") +} + +# Input 1: read _comb_afor.csv +pd_df = plotting_data(infile_params) +my_df_u = pd_df[[1]] # this forms one of the input for combining_dfs_plotting() + +#-------------------------------- +# call: combining_dfs_plotting() +#-------------------------------- +if (!exists("infile_metadata") && exists("gene")){ + #if (!is.character(infile_params) && exists("gene")){{ + in_filename_metadata = paste0(tolower(gene), "_metadata.csv") # part combined for gid + infile_metadata = paste0(outdir, "/", in_filename_metadata) + cat("\nInput file for gene metadata not specified, assuming filename: ", infile_metadata, "\n") +} + +# Input 2: read _meta data.csv +cat("\nReading meta data file:", infile_metadata) + +gene_metadata <- read.csv(infile_metadata + , stringsAsFactors = F + , header = T) + +all_plot_dfs = combining_dfs_plotting(my_df_u + , gene_metadata + , lig_dist_colname = 'ligand_distance' + , lig_dist_cutoff = 10) + +merged_df2 = all_plot_dfs[[1]] +merged_df3 = all_plot_dfs[[2]] +#merged_df2_comp = all_plot_dfs[[3]] +#merged_df3_comp = all_plot_dfs[[4]] +#merged_df2_lig = all_plot_dfs[[5]] +#merged_df3_lig = all_plot_dfs[[6]] #=========== # output #=========== - logo_plot = "logo_plot.svg" plot_logo_plot = paste0(plotdir,"/", logo_plot) -#========================== -# This will return: - -# df with NA for pyrazinamide: -# merged_df2 -# merged_df3 - -# df without NA for pyrazinamide: -# merged_df2_comp -# merged_df3_comp -#=========================== - ########################### # Data for plots # you need merged_df2 or merged_df2_comp @@ -58,13 +95,9 @@ plot_logo_plot = paste0(plotdir,"/", logo_plot) #my_data = merged_df2 #my_data = merged_df2_comp my_data = merged_df3 -my_data = merged_df3_comp +#my_data = merged_df3_comp #%%%%%%%%%%%%%%%%%%%%%%%%%% -# delete variables not required -rm(merged_df2, merged_df2_comp) -#rm(merged_df3, merged_df3_comp) - # quick checks colnames(my_data) str(my_data) @@ -80,7 +113,7 @@ cat("No. of rows in my_data:", nrow(my_data) # mut_pos_occurence < 1 or sample_pos_occurrence <1 # get freq count of positions so you can subset freq<1 -require(data.table) +#require(data.table) #setDT(my_data)[, mut_pos_occurrence := .N, by = .(position)] #265, 14 #extract freq_pos>1 @@ -100,15 +133,13 @@ my_data_snp = my_data # PLOTS: ggseqlogo with custom height # https://omarwagih.github.io/ggseqlogo/ ############# -#require(ggplot2) -#require(tidyverse) -library(ggseqlogo) - -foo = my_data_snp[, c("position", "mutant_type","duet_scaled", "or_mychisq" - , "mut_prop_polarity", "mut_prop_water") ] +foo = my_data_snp[, c("position" + , "mutant_type","duet_scaled", "or_mychisq" + , "mut_prop_polarity", "mut_prop_water")] my_data_snp$log10or = log10(my_data_snp$or_mychisq) -logo_data = my_data_snp[, c("position", "mutant_type", "or_mychisq", "log10or")] +logo_data = my_data_snp[, c("position" + , "mutant_type", "or_mychisq", "log10or")] logo_data_or = my_data_snp[, c("position", "mutant_type", "or_mychisq")] wide_df_or <- logo_data_or %>% spread(position, or_mychisq, fill = 0.0) @@ -124,12 +155,11 @@ position_or = as.numeric(colnames(wide_df_or)) #custom height (OR) logo plot: CORRECT x-axis labelling #============================================ # custom height (OR) logo plot: yayy works - cat("Logo plot with OR as y axis:", plot_logo_plot) svg(plot_logo_plot, width = 30 , height = 6) logo_or = ggseqlogo(wide_df_or, method="custom", seq_type="aa") + ylab("my custom height") + - theme( axis.text.x = element_text(size = 16 + theme( axis.text.x = element_text(size = 12 , angle = 90 , hjust = 1 , vjust = 0.4) @@ -174,7 +204,7 @@ colnames(wide_df_logor_m) position_logor = as.numeric(colnames(wide_df_logor_m)) -# custom height (log10OR) logo plot: yayy works +# custom height (log10OR) logo plot: yayy works ggseqlogo(wide_df_logor_m, method="custom", seq_type="aa") + ylab("my custom height") + theme(legend.position = "bottom" , axis.text.x = element_text(size = 11 @@ -191,85 +221,6 @@ ggseqlogo(wide_df_logor_m, method="custom", seq_type="aa") + ylab("my custom hei , limits = factor(1:length(position_logor)))+ ylab("Log (Odds Ratio)") + scale_y_continuous(limits = c(0, 9)) - #======================================================================= -#%% logo plot from sequence - -################# -# Plot: LOGOLAS (ED plots) -# link: https://github.com/kkdey/Logolas -# on all pncA samples: output of mutate.py -################ -library(Logolas) - -# data was pnca_msa.txt -#FIXME: generate this file - -seqs = read.csv("~/git/Data/pyrazinamide/output/pnca_msa.txt" - , header = FALSE - , stringsAsFactors = FALSE)$V1 - - -# my_data: useful! -logomaker(seqs, type = "EDLogo", color_type = "per_symbol" - , return_heights = TRUE) - -logomaker(seqs, type = "Logo", color_type = "per_symbol", return_heights = TRUE) - #%% end of script #======================================================================= -#============== -# online logo: -#http://www.cbs.dtu.dk/biotools/Seq2Logo/ # good for getting pssm and psfm matrices -#https://weblogo.berkeley.edu/logo.cgi -#http://weblogo.threeplusone.com/create.cgi # weblogo3 - -#=============== -# PSSM logos= example from logomaker -#=============== - -data(pssm) -logo_pssm(pssm, control = list(round_off = 0)) - -#================= -# PSSM: output from http://www.cbs.dtu.dk/biotools/Seq2Logo/ -# of MSA: pnca_msa.txt -#================== -foo = read.csv("/home/tanu/git/Data/pyrazinamide/pssm_transpose.csv") -rownames(foo) = foo[,1] -df = subset(foo, select = -c(1) ) -colnames(df) -colnames(df) = seq(1:length(df)) - -df_m = as.matrix(df) -logo_pssm(df_m, control = list(round_off = 0)) - -#================= -# # PSFM: output from http://www.cbs.dtu.dk/biotools/Seq2Logo/ -# of MSA: pnca_msa.txt -#================= -# not designed for PSFM! -# may want to figure out how to do it! -logo_data = read.csv("/home/tanu/git/Data/pyrazinamide/psfm_transpose.csv") -rownames(logo_data) = logo_data[,1] -df2 = subset(logo_data, select = -c(1) ) -colnames(df2) -colnames(df2) = seq(1:length(df2)) - -df2_m = as.matrix(df2) -logo_pssm(df2_m, control = list(round_off = 0)) - - -#================= -# ggplots: -#https://stackoverflow.com/questions/5438474/plotting-a-sequence-logo-using-ggplot2 -#================= - -library(ggplot2) -library(gglogo) -ggplot(data = ggfortify(sequences, "peptide")) + - geom_logo(aes(x=position, y=bits, group=element, - label=element, fill=interaction(Polarity, Water)), - alpha = 0.6) + - scale_fill_brewer(palette="Paired") + - theme(legend.position = "bottom")