#' 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)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.