|
18 | 18 | #'
|
19 | 19 | #' @keywords internal
|
20 | 20 | .dots_multi_plot <- function(multihyp_data,
|
21 |
| - top=20, |
22 |
| - abrv=50, |
23 |
| - size_by=c("genesets", "significance", "none"), |
24 |
| - pval_cutoff=1, |
25 |
| - fdr_cutoff=1, |
26 |
| - val=c("fdr", "pval"), |
27 |
| - title="") { |
28 |
| - |
29 |
| - # Default arguments |
30 |
| - val <- match.arg(val) |
31 |
| - size_by <- match.arg(size_by) |
32 |
| - |
33 |
| - # Count significant genesets across signatures |
34 |
| - multihyp_dfs <- lapply(multihyp_data, function(hyp_obj) { |
35 |
| - hyp_obj$data %>% |
36 |
| - dplyr::filter(pval <= pval_cutoff) %>% |
37 |
| - dplyr::filter(fdr <= fdr_cutoff) %>% |
38 |
| - dplyr::select(label) |
39 |
| - }) |
40 |
| - |
41 |
| - # Take top genesets |
42 |
| - labels <- names(sort(table(unlist(multihyp_dfs)), decreasing=TRUE)) |
43 |
| - if (!is.null(top)) labels <- head(labels, top) |
44 |
| - |
45 |
| - # Handle empty dataframes |
46 |
| - if (length(labels) == 0) return(ggempty()) |
47 |
| - |
48 |
| - # Create a multihyp dataframe |
49 |
| - dfs <- lapply(multihyp_data, function(hyp_obj) { |
50 |
| - hyp_df <- hyp_obj$data |
51 |
| - hyp_df[hyp_df$label %in% labels, c("label", val), drop=FALSE] |
52 |
| - }) |
53 |
| - |
54 |
| - df <- suppressWarnings(Reduce(function(x, y) merge(x, y, by="label", all=TRUE), dfs)) |
55 |
| - colnames(df) <- c("label", names(dfs)) |
56 |
| - rownames(df) <- df$label |
57 |
| - df <- df[rev(labels), names(dfs)] |
58 |
| - |
59 |
| - # Abbreviate labels |
60 |
| - label.abrv <- substr(rownames(df), 1, abrv) |
61 |
| - if (any(duplicated(label.abrv))) { |
62 |
| - stop("Non-unique labels after abbreviating") |
63 |
| - } else { |
64 |
| - rownames(df) <- factor(label.abrv, levels=label.abrv) |
65 |
| - } |
66 |
| - |
67 |
| - if (val == "pval") { |
68 |
| - cutoff <- pval_cutoff |
69 |
| - color.label <- "P-Value" |
70 |
| - } |
71 |
| - if (val == "fdr") { |
72 |
| - cutoff <- fdr_cutoff |
73 |
| - color.label <- "FDR" |
74 |
| - } |
75 |
| - |
76 |
| - df.melted <- reshape2::melt(as.matrix(df)) |
77 |
| - colnames(df.melted) <- c("label", "signature", "significance") |
78 |
| - df.melted$size <- 1 |
79 |
| - |
80 |
| - if (size_by == "significance") { |
81 |
| - df.melted$size <- df.melted$significance |
82 |
| - } |
83 |
| - |
84 |
| - if (size_by == "genesets") { |
85 |
| - geneset.sizes <- lapply(multihyp_data, function(hyp_obj) { |
86 |
| - hyp_obj$data[, c("label", "geneset")] |
87 |
| - }) %>% |
88 |
| - do.call(rbind, .) %>% |
89 |
| - dplyr::distinct(label, .keep_all=TRUE) %>% |
90 |
| - dplyr::pull(geneset, label) |
91 |
| - df.melted$size <- geneset.sizes[df.melted$label] |
92 |
| - } |
| 21 | + top = 20, |
| 22 | + abrv = 50, |
| 23 | + size_by = c("genesets", "significance", "none"), |
| 24 | + pval_cutoff = 1, |
| 25 | + fdr_cutoff = 1, |
| 26 | + val = c("fdr", "pval"), |
| 27 | + title = "") |
| 28 | +{ |
| 29 | + # Default arguments |
| 30 | + val <- match.arg(val) |
| 31 | + size_by <- match.arg(size_by) |
| 32 | + |
| 33 | + # Count significant genesets across signatures |
| 34 | + multihyp_dfs <- lapply(multihyp_data, function(hyp_obj) { |
| 35 | + hyp_obj$data %>% |
| 36 | + dplyr::filter(pval <= pval_cutoff) %>% |
| 37 | + dplyr::filter(fdr <= fdr_cutoff) %>% |
| 38 | + dplyr::select(label) |
| 39 | + }) |
| 40 | + # Take top genesets |
| 41 | + labels <- names(sort(table(unlist(multihyp_dfs)), decreasing = TRUE)) |
| 42 | + if (!is.null(top)) labels <- head(labels, top) |
| 43 | + |
| 44 | + # Handle empty dataframes |
| 45 | + if (length(labels) == 0) { |
| 46 | + return(ggempty()) |
| 47 | + } |
| 48 | + # Create a multihyp dataframe |
| 49 | + dfs <- lapply(multihyp_data, function(hyp_obj) { |
| 50 | + hyp_df <- hyp_obj$data |
| 51 | + hyp_df[hyp_df$label %in% labels, c("label", val), drop = FALSE] |
| 52 | + }) |
| 53 | + df <- suppressWarnings(Reduce(function(x, y) merge(x, y, by = "label", all = TRUE), dfs)) |
| 54 | + colnames(df) <- c("label", names(dfs)) |
| 55 | + rownames(df) <- df$label |
| 56 | + df <- df[rev(labels), names(dfs)] |
93 | 57 |
|
94 |
| - p <- df.melted %>% |
| 58 | + # Abbreviate labels |
| 59 | + label.abrv <- substr(rownames(df), 1, abrv) |
| 60 | + if (any(duplicated(label.abrv))) { |
| 61 | + stop("Non-unique labels after abbreviating") |
| 62 | + } else { |
| 63 | + rownames(df) <- factor(label.abrv, levels = label.abrv) |
| 64 | + } |
| 65 | + if (val == "pval") { |
| 66 | + cutoff <- pval_cutoff |
| 67 | + color.label <- "P-Value" |
| 68 | + } |
| 69 | + if (val == "fdr") { |
| 70 | + cutoff <- fdr_cutoff |
| 71 | + color.label <- "FDR" |
| 72 | + } |
| 73 | + df.melted <- reshape2::melt(as.matrix(df)) |
| 74 | + colnames(df.melted) <- c("label", "signature", "significance") |
| 75 | + df.melted$size <- 1 |
| 76 | + |
| 77 | + if (size_by == "significance") { |
| 78 | + df.melted$size <- df.melted$significance |
| 79 | + } |
| 80 | + if (size_by == "genesets") { |
| 81 | + geneset.sizes <- lapply(multihyp_data, function(hyp_obj) { |
| 82 | + hyp_obj$data[, c("label", "geneset")] |
| 83 | + }) %>% |
| 84 | + do.call(rbind, .) %>% |
| 85 | + dplyr::distinct(label, .keep_all = TRUE) %>% |
| 86 | + dplyr::pull(geneset, label) |
| 87 | + df.melted$size <- geneset.sizes[df.melted$label] |
| 88 | + } |
| 89 | + p <- df.melted %>% |
95 | 90 | dplyr::filter(significance <= cutoff) %>%
|
96 |
| - ggplot(aes(x=signature, y=label, color=significance, size=size)) + |
| 91 | + ggplot(aes(x = signature, y = label, color = significance, size = size)) + |
97 | 92 | geom_point() +
|
98 |
| - scale_color_continuous(low="#114357", high="#E53935", trans=.reverselog_trans(10)) + |
99 |
| - labs(title=title, color=color.label) + |
100 |
| - theme(plot.title=element_text(hjust=0.5), |
101 |
| - axis.title.y=element_blank(), |
102 |
| - axis.title.x=element_blank(), |
103 |
| - axis.text.x=element_text(angle=45, hjust=1)) |
104 |
| - |
105 |
| - if (size_by == "none") { |
106 |
| - p <- p + guides(size="none") |
107 |
| - } |
108 |
| - if (size_by == "significance") { |
109 |
| - p <- p + scale_size_continuous(trans=.reverselog_trans(10)) + labs(size="Significance") |
110 |
| - } |
111 |
| - if (size_by == "genesets") { |
112 |
| - p <- p + scale_size_continuous(trans=scales::log10_trans()) + labs(size="Genesets\nSize") |
113 |
| - } |
114 |
| - |
115 |
| - return(p) |
| 93 | + scale_color_continuous(low = "#114357", high = "#E53935", trans = .reverselog_trans(10)) + |
| 94 | + labs(title = title, color = color.label) + |
| 95 | + theme( |
| 96 | + plot.title = element_text(hjust = 0.5), |
| 97 | + axis.title.y = element_blank(), |
| 98 | + axis.title.x = element_blank(), |
| 99 | + axis.text.x = element_text(angle = 45, hjust = 1) |
| 100 | + ) |
| 101 | + if (size_by == "none") { |
| 102 | + p <- p + guides(size = "none") |
| 103 | + } |
| 104 | + if (size_by == "significance") { |
| 105 | + p <- p + scale_size_continuous(trans = .reverselog_trans(10)) + labs(size = "Significance") |
| 106 | + } |
| 107 | + if (size_by == "genesets") { |
| 108 | + #p <- p + scale_size_continuous(trans = scales::log10_trans()) + labs(size = "Genesets\nSize") |
| 109 | + p <- p + scale_color_continuous( |
| 110 | + high = "#114357", low = "#E53935", trans = scales::log10_trans(), |
| 111 | + guide = guide_colorbar(reverse = TRUE) |
| 112 | + ) |
| 113 | + } |
| 114 | + return(p) |
116 | 115 | }
|
117 | 116 |
|
118 | 117 | #' Plot top enriched genesets
|
|
0 commit comments