####################################################################
## Author: Gro Nilsen, Knut Liestøl and Ole Christian Lingjærde.
## Maintainer: Gro Nilsen <gronilse@ifi.uio.no>
## License: Artistic 2.0
## Part of the copynumber package
## Reference: Nilsen and Liestøl et al. (2012), BMC Genomics
####################################################################
# Function to set default plotting parameteres for frequency plots, and modify these according to user specifications:
# Input:
### type: plot type (genome or bychrom)
### nc: number of columns in plot
### nr: number of rows in plot
### thres.gain,thres.loss: aberration calling thresholds
### chrom: a vector giving the chromosomes to be plotted, only used for type=bychrom
### ... : other optional plot parameters specified by user
# Output:
### op: a list containing default and user modified plot parameters
### Required by:
### plotFreq (genomeFreq and chromosomeFreq)
### plotWeightedFreq (weightedGenomeFreq and weightedChromosomeFreq)
getFreqPlotParameters <- function(type, nc, nr, thres.gain, thres.loss, chrom = NULL, ...) {
# Apply a scaling factor according to number of columns and rows in plot:
# seems to work ok:
cr <- nc * nr
f <- 1 - 0.013 * cr
# Common default parameters for genome and bychrom:
op <- list(
ylab = "% with gain or loss",
plot.size = c(11.8, min(3 * nr, 8.2)),
col.gain = "red",
col.loss = "blue",
plot.unit = "mbp",
percentLines = TRUE,
continuous = TRUE,
assembly = "hg19",
las = 1,
chrom.lty = 5,
chrom.side = 1,
chrom.col = "darkgrey",
cyto.text = FALSE,
# Parameters that will be set later
ylim = NULL,
xlim = NULL,
xlab = NULL,
mgp = NULL,
mar = NULL,
at.x = NULL,
at.y = NULL,
ideo.frac = NA,
# Parameters that depend on the grid layout of the plot
f = f,
main.line = 0.6 * f,
cex.lab = 0.9 * f,
cex.main = f,
cex.axis = 0.8 * f,
cex.cytotext = 0.6 * f,
cex.chrom = 0.8 * f
)
# Defaults specific to plot type:
# For genome plot:
if (type == "genome") {
op$main <- paste("Thresholds = [", thres.loss, ",", thres.gain, "]", sep = "")
op$main.line <- 1.5 * f
op$xlab <- ""
op$plot.ideo <- FALSE
op$mar <- c(1.5 * op$f, 3 * op$f, 2.3 * op$f, 1 * op$f)
}
# For chromosome plot:
if (type == "bychrom") {
op$main <- paste("Chromosome ", chrom, sep = "")
op$title <- paste("Thresholds = [", thres.loss, ",", thres.gain, "]", sep = "")
op$plot.ideo <- TRUE
}
# Check for user modifications
op <- modifyList(op, list(...))
# Set/modify parameters more depending on user input:
# Set assembly to refer to stored data instead of character string:
op$assembly <- get(op$assembly)
# Placement of labels and axis annotation:
if (is.null(op$mgp)) {
op$mgp <- c(1.3, 0.05, 0) * f
mgp.y <- c(2, 0.5, 0) * f
} else {
mgp.y <- op$mgp
}
op$mgp.y <- mgp.y
# Xlabel
if (is.null(op$xlab)) {
op$xlab <- paste("Position (", op$plot.unit, ")", sep = "")
}
# margins:
if (is.null(op$mar)) {
op$mar <- if (op$plot.ideo) c(0.2 * f, 3 * f, 2.5 * f, f) else c(1.5 * f, 3 * f, 2.5 * f, f)
}
# Set default ideo.frac and ideogram margins:
if (op$plot.ideo) {
# ideogram margins:
op$mar.i <- c(0.2 * f, 3 * f, 0, f)
if (op$cyto.text) {
# Need to increase bottom margin:
op$mar.i <- op$mar.i + c(2, 0, 0, 0)
}
# Make sure left and right margins are equal for mar and mar.i:
op$mar.i[c(2, 4)] <- op$mar[c(2, 4)]
if (is.na(op$ideo.frac)) {
# ideo.frac has not been defined by user:
op$ideo.frac <- 0.05 * sqrt(sqrt(cr))
if (op$cyto.text) {
# Need larger space for ideogram:
op$ideo.frac <- op$ideo.frac * 2
}
}
} else {
op$ideo.frac <- 0
}
# Check that we have a title for each plot:
if (type == "genome" && length(op$main) < length(thres.gain)) {
op$main <- rep(op$main[1], length(thres.gain))
}
if (type == "bychrom" && length(op$main) < length(chrom)) {
op$main <- rep(op$main[1], length(chrom))
}
# Make sure there is enough titles:
if (type == "bychrom" && length(op$title) < length(thres.gain)) {
op$title <- rep(op$title[1], length(thres.gain))
}
return(op)
} # end function
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.