geposanui/scatter_plot.R

59 lines
No EOL
1.6 KiB
R

library(data.table)
library(ggplot2)
#' Draw a scatter plot containing gene positions.
#'
#' @param input Input data from [`load_input()`].
#' @param results Results from [`process_input()`].
#' @param species Species to be displayed.
scatter_plot <- function(gene_ids, input, results, species) {
if (length(gene_ids) < 1) {
return(ggplot())
}
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
) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
}