R/plot_msa.R

#' Plot the MSA Object
#'
#' @param msa Required. A multiple sequence alignment.
#' @import ggplot2
#' @importFrom purrr reduce
#' @importFrom dplyr %>% 
#' @export
plot_msa <- function(msa) {
  if (!class(msa) %in% c("DNAStringSet", "DNAMultipleAlignment"))  {
    stop("This function requires a DNAStringSet or DNAMultipleAlignment") 
  }
  
  if (class(msa) == "DNAStringSet") dna <- msa
  if (class(msa) == "DNAMultipleAlignment") dna <- DNAStringSet(msa)
  
  msanames <- names(dna)
  
  dfs <- lapply(seq(dna), function(x){
    dna1 <- dna[[x]]
    name <- names(dna)[[x]]
    df <- data.frame(seq(dna1), strsplit(as.character(dna1), ""))
    names(df) <- c("position", "base")
    df$seqname <- name
    df})
  
  df <- purrr::reduce(dfs, rbind)
  
  # order the sequence to be the same as the MSA
  df$seqname <- factor(df$seqname, levels=msanames)
  
  # filter out sequences
  df <- df %>% filter(base!="-")
  
  ggplot(df, aes(x=position, y=seqname, fill=base)) + 
    geom_tile()  + 
    theme_minimal()
  
}
esnapd/DegeneratePrimerTools documentation built on May 16, 2019, 8:52 a.m.