From 363dee2cbdf4ab5083664902f6637e919f5acc79 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Thu, 26 Aug 2021 12:50:03 +0200 Subject: [PATCH] Enhance scatter plot --- scatter_plot.R | 82 +++++++++++++++++++++++++++++++++++--------------- server.R | 2 +- 2 files changed, 58 insertions(+), 26 deletions(-) diff --git a/scatter_plot.R b/scatter_plot.R index 1ed1e25..78d5f8f 100644 --- a/scatter_plot.R +++ b/scatter_plot.R @@ -2,31 +2,63 @@ library(data.table) library(ggplot2) #' Draw a scatter plot containing gene positions. -scatter_plot <- function(gene_ids, data) { - plot <- ggplot() + - scale_x_discrete( - name = "Species", - breaks = data$species$id, - labels = data$species$label - ) + - scale_y_continuous(name = "Distance to telomeres [Mbp]") - - colors <- rainbow(length(gene_ids)) - - for (i in seq_len(length(gene_ids))) { - gene_id <- gene_ids[i] - - plot <- plot + - geom_point( - data$distances[gene == gene_id], - mapping = aes( - x = species, - y = distance / 1000000, - ), - color = colors[i], - size = 4 - ) +#' +#' @param input Input data from [`load_input()`]. +#' @param results Results from [`process_input()`]. +scatter_plot <- function(gene_ids, input, results) { + if (length(gene_ids) < 1) { + return(ggplot()) } - plot + # Exclude species with naturally or artificially short chromosomes as well + # as non-replicatively aging species. + # TODO: Sync with process_input(). + species <- input$species[ + median_distance >= 7500000 & group == "replicative" + ] + + species_ids <- species[, id] + + data <- merge( + input$genes[id %in% gene_ids, .(id, name)], + input$distances[species %in% species_ids], + by.x = "id", by.y = "gene" + ) + + for (gene_id in gene_ids) { + cluster_species <- unlist(results[gene == gene_id, cluster_species]) + data[id == gene_id, in_cluster := species %in% cluster_species] + } + + ggplot(data) + + scale_x_discrete( + name = "Species", + breaks = species$id, + labels = species$label + ) + + scale_y_continuous( + name = "Distance to telomeres [Mbp]", + limits = function(x) { + if (x[2] < 15) { + c(0, 15) + } else { + x + } + } + ) + + scale_color_discrete(name = "Gene") + + scale_shape_discrete( + name = "Part of cluster", + breaks = c(TRUE, FALSE), + labels = c("Yes", "No") + ) + + geom_point( + mapping = aes( + x = species, + y = distance / 1000000, + color = name, + shape = in_cluster + ), + size = 5 + ) } \ No newline at end of file diff --git a/server.R b/server.R index 8b8fddd..ea65a45 100644 --- a/server.R +++ b/server.R @@ -37,6 +37,6 @@ server <- function(input, output) { output$scatter <- renderPlot({ gene_ids <- filtered()[input$genes_rows_selected, gene] - scatter_plot(gene_ids, data) + scatter_plot(gene_ids, data, results) }) } \ No newline at end of file