#' Returns path to an svg file with enrichment plot #' @param es ExpressionSet object. #' @param rankBy name of the numeric column used for gene ranking #' @param selectedGenes indexes of selected genes (starting from one, in the order of fData) #' @param width width of the image (in inches) #' @param height height of the image (in inches) #' @param vertical whether to use vertical orientation (default: FALSE) #' @return path to an svg file #' @importFrom fgsea plotEnrichment fgsea #' @importFrom ggplot2 ggtitle #' @import svglite gseaPlot <- function(es, rankBy, selectedGenes, width, height, vertical=FALSE) { featureData <- fData(es) colnames(featureData) <- fvarLabels(es) ranks <- setNames(featureData[, rankBy], as.character(seq_len(nrow(featureData)))) pathway <- as.character(selectedGenes) fgseaRes <- fgsea(list(pathway), ranks, nperm=2000, nproc=1) pvalString <- if (fgseaRes$nMoreExtreme == 0) { " < 1e-3" } else { sprintf(" = %.2g", fgseaRes$pval) } labelString <- sprintf("p-value %s, NES = %.2f", pvalString, fgseaRes$NES) p <- plotEnrichment(pathway, ranks) + ggtitle(labelString) if (vertical) { p <- p + scale_x_reverse(limits=c(length(ranks) + 1, -1), expand=c(0, 0)) + coord_flip() + NULL } p <- p + theme(plot.margin = unit(c(0.5, 0.5, 0.5, 0.5), "cm")) p f <- tempfile(pattern = "enrichment", tmpdir = getwd(), fileext = ".svg") ggsave(p, filename = f, width=width, height=height) # ggsave(p, filename = f, width=width, height=height) jsonlite::toJSON(f) }