OverviewPlot <- function(DNAcopy.object, samples, range.CNA = c(-2, 2),
color.palette = colorRampPalette(c("blue", "white", "red"))(49)) {
## Use all samples by default
if(missing(samples)) {
samples <- unique(DNAcopy.object$output$ID)
}
## Select samples
DNAcopy.object$output <- DNAcopy.object$output[DNAcopy.object$output$ID %in% samples, ]
## Cap range
DNAcopy.object$output$seg.mean[DNAcopy.object$output$seg.mean < range.CNA[1]] <- range.CNA[1]
DNAcopy.object$output$seg.mean[DNAcopy.object$output$seg.mean > range.CNA[2]] <- range.CNA[2]
## Reshape data.frame according to sample name
# reshape2::dcast -> to wider data.frame; right-hand of tilde needs to be a 'measured variable' (i.e., needs to go into columns)
# reshape2::melt -> to narrower data.frame
# Names are changed by dcast according to level order -> change order levels (!)
order.samples <- unique(DNAcopy.object$output$ID)
DNAcopy.object$output$ID <- factor(DNAcopy.object$output$ID, levels = order.samples)
DNAcopy.object.cast <- reshape2::dcast(data = DNAcopy.object$output, formula = ID + chrom + loc.start + loc.end + num.mark + seg.mean ~ ID
, value.var = "num.mark")
DNAcopy.object.cast[is.na(DNAcopy.object.cast)] <- 0
## Calculate number of samples
sample.number <- ncol(DNAcopy.object.cast) - 6
## Collapse data
DNAcopy.object.cast.aggregate <- aggregate(DNAcopy.object.cast[, c("chrom", "num.mark")], by = list(DNAcopy.object.cast$chrom), FUN = sum)
## Calculate scaling factors
range.factor <- range.CNA[2] - range.CNA[1]
## Create overviewPlot
par(mfrow = c(1, 2 + sample.number), mar = c(7, 0, 1, 0))
barplot(matrix(DNAcopy.object.cast.aggregate[, "num.mark"], dimnames = list(NULL, "Chr")), col = c("black", "white"), border = NA
, yaxt = "n", xlim = c(0, 0.1), width = 0.1, las = 2)
for(i in 1:sample.number) {
barplot(as.matrix(DNAcopy.object.cast[, 6 + i, drop = FALSE])
, col = color.palette[1 + (DNAcopy.object.cast$seg.mean - range.CNA[1]) / range.factor * (length(color.palette) - 1)], border = NA
, yaxt = "n", xlim = c(0, 0.1), width = 0.1, las = 2)
}
barplot(matrix(rep(1, length(color.palette)), ncol = 1, dimnames = list(NULL, paste(range.CNA, collapse = " to ")))
, col = color.palette, border = NA, yaxt = "n", beside = FALSE, xlim = c(0, 0.1), width = 0.1, las = 2)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.