R/plotlycp.R

Defines functions plotlycp

Documented in plotlycp

#' plotlycp function
#'
#' Draws plotly plot of copy number matrix
#'
#' @param pat2 data frame generated by rnasubset function
#' @param cp data frame of mutation matrix
#' @param genecp data frame generated by diffcp function
#' @param gene character(1) gene of interest
#'
#' @import data.table
#' @import plotly
#'
#' @return interactive oncoprint-like plot for top 20 differentially copy number altered genes
#'
#' @examples
#' data(skcm)
#' gene <- "SOX10"
#' sox10.pat <- rnasubset(pat, rna, gene, 10)
#' sox10.cp <- diffcp(sox10.pat, cp)
#' plotlycp(sox10.pat, cp, sox10.cp, gene)
#'
#' @export
#'
plotlycp <- function(pat2, cp, genecp, gene) {
  setkey(pat2, gene2)

  overlap.high <- intersect(pat2[levels(pat2$gene2)[1], name], colnames(cp))
  overlap.low <- intersect(pat2[levels(pat2$gene2)[2], name], colnames(cp))

  setkey(cp, Gene)
  glist <- c(genecp[p.value.high < 0.05, Gene[1:15]], genecp[p.value.low < 0.05, Gene[1:15]], gene)
  glist <- glist[!duplicated(glist)]

  #getting copy number profile for high group
  cp1.high <- cp[glist,c("Gene", overlap.high), with=F]
  cp1.high <- cp1.high[!(is.na(rowSums(cp1.high[, colnames(cp1.high)[-1], with=F])))]

  #getting copy number profile for low group
  cp1.low <- cp[glist,c("Gene", overlap.low), with=F]
  cp1.low <- cp1.low[!(is.na(rowSums(cp1.low[, colnames(cp1.low)[-1], with=F])))]

  #getting gene and patient order for plotting
  cp1.melt.high <- melt(cp1.high, variable.name="name", id.vars="Gene")
  gg1.high <- dcast.data.table(cp1.melt.high, name ~ Gene)
  gene.order.high <- names(sort(apply(gg1.high[,colnames(gg1.high)[-1], with=F], 2, sum), decreasing=T))
  setkeyv(gg1.high, gene.order.high)
  cp1.melt.high[, gene2 := levels(pat2$gene2)[1]]

  cp1.melt.low <- melt(cp1.low, variable.name="name", id.vars="Gene")
  gg1.low <- dcast.data.table(cp1.melt.low, name ~ Gene)
  gene.order.low <- names(sort(apply(gg1.low[,colnames(gg1.low)[-1], with=F], 2, sum), decreasing=T))
  setkeyv(gg1.low, gene.order.low)
  cp1.melt.low[, gene2 := levels(pat2$gene2)[2]]

  #combine mutation groups order patients according to sorting from individual dcasts
  cp1.melt <- rbind(cp1.melt.high, cp1.melt.low)
  cp1.melt$name <- factor(cp1.melt$name,
                                          levels = c(as.character(rev(gg1.high$name)),
                                                     as.character(rev(gg1.low$name))))
  cp1.melt$Gene <- factor(cp1.melt$Gene, levels = rev(gene.order.high))

  cg1 <- ggplot(cp1.melt, aes(name, Gene, fill = as.factor(value))) +
    geom_tile(colour=c("white")) +
    labs(x = "Patient", y="Gene") +
    scale_x_discrete(expand=c(0,0))+scale_y_discrete(expand=c(0,0)) +
    scale_fill_manual(values = c("#f1a340", "#f0f0f0", "#998ec3"),
                      labels = c(-1:1),
                      guide = guide_legend(title = "Copy number change")) +
    theme(title = element_text(size=16),
          axis.ticks = element_blank(),
          axis.text.x = element_blank(),
          axis.text.y = element_text(size=12),
          axis.title.x = element_text(size=14),
          axis.title.y = element_text(size=14),
          legend.text = element_text(size=12)) +
    ggtitle(paste(gene)) +
    facet_grid(. ~ gene2, scales = "free", space = "free")
  cg1
  #ggplotly(cg1)
}
pcheng84/TCGAbrowser documentation built on Sept. 7, 2021, 8:28 p.m.