Mercurial > repos > marie-tremblay-metatoul > nmr_preprocessing
diff DrawFunctions.R @ 7:122df1bf0a8c draft default tip
planemo upload for repository https://github.com/workflow4metabolomics/nmr_preprocessing commit 3d328007dd7716848ec2eeb6c2a472f27eeb2995
author | workflow4metabolomics |
---|---|
date | Fri, 11 Jul 2025 08:33:38 +0000 |
parents | 5e64657b4fe5 |
children |
line wrap: on
line diff
--- a/DrawFunctions.R Wed May 13 03:52:09 2020 -0400 +++ b/DrawFunctions.R Fri Jul 11 08:33:38 2025 +0000 @@ -1,268 +1,280 @@ -require(ggplot2) -require(gridExtra) -require(reshape2) +library(ggplot2) # nice plots +library(gridExtra) # nice plots +library(reshape2) # data manipulation - -Draw <- function(Signal_data, type.draw = c("signal", "pca"), output = c("default", - "window", "png", "pdf"), dirpath = ".", filename = "%003d", height = 480, +Draw <- function(Signal_data, type.draw = c("signal", "pca"), output = c( + "default", + "window", "png", "pdf" + ), dirpath = ".", filename = "%003d", height = 480, width = 640, pdf.onefile = TRUE, ...) { - - # Data initialisation and checks ---------------------------------------------- - type.draw <- match.arg(type.draw) - output <- match.arg(output) - fullpath <- paste(file.path(dirpath, filename), output, sep = ".") - createFile <- TRUE - createWindow <- FALSE - - # Drawing -------------------------------------------------------------------- - # output - switch(output, default = { - createFile <- FALSE - }, window = { - createWindow <- TRUE - createFile <- FALSE - }, png = { - grDevices::png(fullpath, width, height) - }, pdf = { - grDevices::pdf(fullpath, width = width/72, height = height/72, - onefile = pdf.onefile) - }, { - stop("Unknown output type.") - }) - - # Drawing type (signal/spectrum or PCA) - funs <- list(signal = DrawSignal, pca = DrawPCA) - if (type.draw %in% names(funs)) { - fun <- funs[[type.draw]] - } else { - stop(paste("Unknown type:", type.draw)) - } - - # Plot finalisation ---------------------------------------------- - if (is.vector(Signal_data)) { - Signal_data <- vec2mat(Signal_data) - } - fun(Signal_data, createWindow = createWindow, ...) - if (createFile) { - grDevices::dev.off() - } + # Data initialisation and checks ---------------------------------------------- + type.draw <- match.arg(type.draw) + output <- match.arg(output) + fullpath <- paste(file.path(dirpath, filename), output, sep = ".") + createFile <- TRUE + createWindow <- FALSE + + # Drawing -------------------------------------------------------------------- + # output + switch(output, + default = { + createFile <- FALSE + }, + window = { + createWindow <- TRUE + createFile <- FALSE + }, + png = { + grDevices::png(fullpath, width, height) + }, + pdf = { + grDevices::pdf(fullpath, + width = width / 72, height = height / 72, + onefile = pdf.onefile + ) + }, + { + stop("Unknown output type.") + } + ) + + # Drawing type (signal/spectrum or PCA) + funs <- list(signal = DrawSignal, pca = DrawPCA) + if (type.draw %in% names(funs)) { + fun <- funs[[type.draw]] + } else { + stop(paste("Unknown type:", type.draw)) + } + + # Plot finalisation ---------------------------------------------- + if (is.vector(Signal_data)) { + Signal_data <- vec2mat(Signal_data) + } + fun(Signal_data, createWindow = createWindow, ...) + if (createFile) { + grDevices::dev.off() + } } ##### DrawSignal -DrawSignal <- function(Signal_data, subtype = c("stacked", "together", - "separate", "diffmean", "diffmedian", "diffwith"), - ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T, - xlab = "rowname", RowNames = NULL, row = 1, num.stacked = 4, +DrawSignal <- function(Signal_data, subtype = c( + "stacked", "together", + "separate", "diffmean", "diffmedian", "diffwith" + ), + ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T, + xlab = "rowname", RowNames = NULL, row = 1, num.stacked = 4, main = NULL, createWindow) { - # nticks - - # Data initialisation and checks ---------------------------------------------- - - subtype <- match.arg(subtype) - vec <- is.vector(Signal_data) - if (vec) { - Signal_data <- vec2mat(Signal_data) - } - - n <- nrow(Signal_data) - m <- ncol(Signal_data) - - if (n < num.stacked){ - num.stacked <- n - } - - scale <- colnames(Signal_data) - - num.plot <- sum(ReImModArg) - - Var <- rowname <- value <- NULL # only for R CMD check - - # Drawing array - if (num.plot <= 0) { - stop("Nothing selected in ReImModArg.") - } else if (num.plot <= 2) { - if (vertical) { - nrow <- num.plot - ncol <- 1 - } else { - nrow <- 1 - ncol <- num.plot + # nticks + + # Data initialisation and checks ---------------------------------------------- + + subtype <- match.arg(subtype) + vec <- is.vector(Signal_data) + if (vec) { + Signal_data <- vec2mat(Signal_data) + } + + n <- nrow(Signal_data) + m <- ncol(Signal_data) + + if (n < num.stacked) { + num.stacked <- n } - } else { - nrow <- 2 - ncol <- 2 - } - - # RowNames - if (is.null(RowNames)) { - RowNames <- rownames(Signal_data) - if (is.null(RowNames)) { - RowNames <- 1:n + + scale <- colnames(Signal_data) + + num.plot <- sum(ReImModArg) + + Var <- rowname <- value <- NULL # only for R CMD check + + # Drawing array + if (num.plot <= 0) { + stop("Nothing selected in ReImModArg.") + } else if (num.plot <= 2) { + if (vertical) { + nrow <- num.plot + ncol <- 1 + } else { + nrow <- 1 + ncol <- num.plot + } + } else { + nrow <- 2 + ncol <- 2 + } + + # RowNames + if (is.null(RowNames)) { + RowNames <- rownames(Signal_data) + if (is.null(RowNames)) { + RowNames <- 1:n + } + } else { + if (!is.vector(RowNames)) { + stop("RowNames is not a vector") + } + if (length(RowNames) != n) { + stop(paste("RowNames has length", length(RowNames), "and there are", n, "FIDs.")) + } + } + + if (n == 1) { + RowNames <- deparse(substitute(Signal_data)) + } + + elements <- list() + if (ReImModArg[1]) { + elements[["Re"]] <- Re(Signal_data) + rownames(elements[["Re"]]) <- RowNames + } + if (ReImModArg[2]) { + elements[["Im"]] <- Im(Signal_data) + rownames(elements[["Im"]]) <- RowNames + } + if (ReImModArg[3]) { + elements[["Mod"]] <- Mod(Signal_data) + rownames(elements[["Mod"]]) <- RowNames + } + if (ReImModArg[4]) { + elements[["Arg"]] <- Arg(Signal_data) + rownames(elements[["Arg"]]) <- RowNames } - } else { - if (!is.vector(RowNames)) { - stop("RowNames is not a vector") - } - if (length(RowNames) != n) { - stop(paste("RowNames has length", length(RowNames), "and there are", n, "FIDs.")) - } - } - - if (n == 1) { - RowNames <- deparse(substitute(Signal_data)) - } - - elements <- list() - if (ReImModArg[1]) { - elements[["Re"]] <- Re(Signal_data) - rownames(elements[["Re"]]) <- RowNames - } - if (ReImModArg[2]) { - elements[["Im"]] <- Im(Signal_data) - rownames(elements[["Im"]]) <- RowNames - } - if (ReImModArg[3]) { - elements[["Mod"]] <- Mod(Signal_data) - rownames(elements[["Mod"]]) <- RowNames - } - if (ReImModArg[4]) { - elements[["Arg"]] <- Arg(Signal_data) - rownames(elements[["Arg"]]) <- RowNames - } - - - - - # Drawing -------------------------------------------------------------------- - - y = x = NULL # only for R CMD check - - - # SEPARATE or STACKED =============== - if (subtype == "separate" | subtype == "stacked") { - - i <- 1 - while (i <= n) { - if (createWindow) { - grDevices::dev.new(noRStudioGD = TRUE) - } - if (subtype == "separate") { - # The other uses gridExtra to do that + + + + + # Drawing -------------------------------------------------------------------- + + y <- x <- NULL # only for R CMD check + + + # SEPARATE or STACKED =============== + if (subtype == "separate" | subtype == "stacked") { + i <- 1 + while (i <= n) { + if (createWindow) { + grDevices::dev.new(noRStudioGD = TRUE) + } + if (subtype == "separate") { + # The other uses gridExtra to do that + graphics::par(mfrow = c(nrow, ncol)) + } + plots <- list() + if (subtype == "separate") { + last <- i + } else { + last <- min(i + num.stacked - 1, n) + } + for (name in names(elements)) { + if (subtype == "separate") { + if (n == 1) { + df <- data.frame(x = as.numeric(scale), y = elements[[name]]) + } else { + df <- data.frame(x = as.numeric(scale), y = elements[[name]][i, ]) + } + + plots[[name]] <- ggplot2::ggplot(data = df, ggplot2::aes(x = x, y = y)) + + ggplot2::geom_line(size = 1) + + ggplot2::theme(legend.position = "none") + + ggplot2::labs(x = xlab, y = name) + + ggplot2::ggtitle(RowNames[i]) + + ggplot2::theme_bw() + + if ((df[1, "x"] - df[(dim(df)[1]), "x"]) > 0) { + plots[[name]] <- plots[[name]] + ggplot2::scale_x_reverse() + } + } else { + if (n == 1) { + melted <- data.frame( + rowname = rep(name, m), + Var = as.numeric(scale), value = elements[[name]][i, ] + ) + } else if (last == i) { + melted <- data.frame( + rowname = rep(rownames(elements[[name]])[i], m), + Var = as.numeric(scale), value = elements[[name]][i, ] + ) + } else { + melted <- reshape2::melt(elements[[name]][i:last, ], varnames = c("rowname", "Var")) + } + + + plots[[name]] <- ggplot2::ggplot(data = melted, ggplot2::aes(x = Var, y = value)) + + ggplot2::geom_line(size = 0.3) + + ggplot2::facet_grid(rowname ~ ., scales = "free_y") + + ggplot2::theme(legend.position = "none") + + ggplot2::labs(x = xlab, y = name) + + ggplot2::ggtitle(label = main) + + ggplot2::theme_bw() + + if ((melted[1, "Var"] - melted[(dim(melted)[1]), "Var"]) > 0) { + plots[[name]] <- plots[[name]] + ggplot2::scale_x_reverse() + } + } + } + + if (subtype == "stacked") { + do.call(gridExtra::grid.arrange, c(plots, list(nrow = nrow, ncol = ncol))) + } + + i <- last + 1 + } + } else if (subtype %in% c("together", "diffmean", "diffmedian", "diffwith")) { + # TOGHETER or DIFFMEAN or DIFFMEDIAN or DIFFWITH =============== + + rainbow_colors <- grDevices::rainbow(n) + + if (createWindow) { + grDevices::dev.new(noRStudioGD = TRUE) + } graphics::par(mfrow = c(nrow, ncol)) - } - plots <- list() - if (subtype == "separate") { - last <- i - } else { - last <- min(i + num.stacked - 1, n) - } - for (name in names(elements)) { - if (subtype == "separate") { - if (n == 1) { - df <- data.frame(x = as.numeric(scale), y = elements[[name]]) - } else {df <- data.frame(x = as.numeric(scale), y = elements[[name]][i, ]) - } - - plots[[name]] <- ggplot2::ggplot(data = df, ggplot2::aes(x = x, y = y)) + - ggplot2::geom_line(size = 1) + - ggplot2::theme(legend.position = "none") + - ggplot2::labs(x = xlab, y = name) + - ggplot2::ggtitle(RowNames[i]) + - ggplot2::theme_bw() - - if ((df[1, "x"] - df[(dim(df)[1]), "x"]) > 0) { - plots[[name]] <- plots[[name]] + ggplot2::scale_x_reverse() - } - - } else { - - if (n == 1 ) { - melted <- data.frame(rowname = rep(name, m), - Var = as.numeric(scale), value = elements[[name]][i,]) - } else if (last==i){ - melted <- data.frame(rowname = rep(rownames(elements[[name]])[i], m), - Var = as.numeric(scale), value = elements[[name]][i,]) - } else {melted <- reshape2::melt(elements[[name]][i:last, ], - varnames = c("rowname", "Var")) - } - - - plots[[name]] <- ggplot2::ggplot(data = melted, ggplot2::aes(x = Var, y = value)) + - ggplot2::geom_line(size = 0.3) + - ggplot2::facet_grid(rowname ~ ., scales = "free_y") + - ggplot2::theme(legend.position = "none") + - ggplot2::labs(x = xlab, y = name) + - ggplot2::ggtitle(label = main) + - ggplot2::theme_bw() - - if ((melted[1, "Var"] - melted[(dim(melted)[1]), "Var"]) > 0) { - plots[[name]] <- plots[[name]] + ggplot2::scale_x_reverse() - } + + plots <- list() + + # Loop for Re, Im, Mod and Arg + for (name in names(elements)) { + # Get this part of the signal + element <- elements[[name]] + + # Express the signal according to a reference if asked by `subtype' + if (subtype == "diffmean") { + element <- sweep(element, MARGIN = 2, colMeans(element), `-`) + } else if (subtype == "diffmedian") { + element <- sweep(element, MARGIN = 2, matrixStats::colMedians(element), `-`) + } else if (subtype == "diffwith") { + element <- sweep(element, MARGIN = 2, element[row, ], `-`) + if (row == 1 & n > 1) { + # Since we use plot on the first row and lines on the following, the y + # scale is calculated at the first row so if the first row is all 0, it + # causes problems + tmp <- element[1, ] + element[1, ] <- element[2, ] + element[2, ] <- tmp + } + } + melted <- reshape2::melt(elements[[name]][i:last, ], varnames = c("rowname", "Var")) + + plots[[name]] <- ggplot2::ggplot(melted, ggplot2::aes( + x = Var, + y = value, group = rowname, colour = rowname + )) + + ggplot2::geom_line() + + ggplot2::labs(x = xlab, y = name) + + ggplot2::scale_colour_discrete(name = NULL) + + ggplot2::ggtitle(main) + + if ((melted[1, "Var"] - melted[(dim(melted)[1]), "Var"]) > + 0) { + plots[[name]] <- plots[[name]] + ggplot2::scale_x_reverse() + } + + do.call(gridExtra::grid.arrange, c(plots, list( + nrow = nrow, + ncol = ncol + ))) } - } - - if (subtype == "stacked") { - do.call(gridExtra::grid.arrange, c(plots, list(nrow = nrow, ncol = ncol))) - } - - i <- last + 1 } - } else if (subtype %in% c("together", "diffmean", "diffmedian", "diffwith")) { - - # TOGHETER or DIFFMEAN or DIFFMEDIAN or DIFFWITH =============== - - rainbow_colors <- grDevices::rainbow(n) - - if (createWindow) { - grDevices::dev.new(noRStudioGD = TRUE) - } - graphics::par(mfrow = c(nrow, ncol)) - - plots <- list() - - # Loop for Re, Im, Mod and Arg - for (name in names(elements)) { - # Get this part of the signal - element <- elements[[name]] - - # Express the signal according to a reference if asked by `subtype' - if (subtype == "diffmean") { - element <- sweep(element, MARGIN = 2, colMeans(element), `-`) - } else if (subtype == "diffmedian") { - element <- sweep(element, MARGIN = 2, matrixStats::colMedians(element), `-`) - } else if (subtype == "diffwith") { - element <- sweep(element, MARGIN = 2, element[row, ], `-`) - if (row == 1 & n > 1) { - # Since we use plot on the first row and lines on the following, the y - # scale is calculated at the first row so if the first row is all 0, it - # causes problems - tmp <- element[1, ] - element[1, ] <- element[2, ] - element[2, ] <- tmp - } - } - - - melted <- reshape2::melt(elements[[name]], varnames = c("rowname", "Var")) - - - plots[[name]] <- ggplot2::ggplot(melted, ggplot2::aes(x = Var, - y = value, group = rowname, colour = rowname)) + ggplot2::geom_line() + - ggplot2::labs(x = xlab, y = name) + ggplot2::scale_colour_discrete(name = NULL) + - ggplot2::ggtitle(main) - - if ((melted[1, "Var"] - melted[(dim(melted)[1]), "Var"]) > - 0) { - plots[[name]] <- plots[[name]] + ggplot2::scale_x_reverse() - } - - do.call(gridExtra::grid.arrange, c(plots, list(nrow = nrow, - ncol = ncol))) - } - } - - }