diff --git a/R/plots.R b/R/plots.R index 1432a90..c0bb4ae 100644 --- a/R/plots.R +++ b/R/plots.R @@ -215,6 +215,7 @@ plot_rankings <- function(rankings, gene_sets) { #' @param gene_sets A named list of vectors of gene IDs to highlight. The names #' will be used to distinguish the sets and in the legend. #' @param use_ranks Show ranks instead of scores. +#' @param use_sample Limit genes outside of the gene sets to a random sample. #' #' @export plot_rankings_correlation <- function(ranking_x, @@ -222,7 +223,8 @@ plot_rankings_correlation <- function(ranking_x, name_x, name_y, gene_sets = NULL, - use_ranks = TRUE) { + use_ranks = TRUE, + use_sample = TRUE) { if (!requireNamespace("plotly", quietly = TRUE)) { stop("Please install \"plotly\" to use this function.") } @@ -241,12 +243,11 @@ plot_rankings_correlation <- function(ranking_x, stats::predict(model, model_data, interval = "confidence") )] - # Take a random sample to actually plot. - sample_data <- data[!gene %chin% unlist(gene_sets)][sample(.N, 1000)] + fig <- plotly::plot_ly() - fig <- plotly::plot_ly() |> - plotly::add_markers( - data = sample_data, + if (use_sample) { + fig <- fig |> plotly::add_markers( + data = data[!gene %chin% unlist(gene_sets)][sample(.N, 1000)], x = ~x, y = ~y, name = "All genes", @@ -255,7 +256,30 @@ plot_rankings_correlation <- function(ranking_x, size = 5 ), hoverinfo = "skip" - ) |> + ) + } else { + fig <- fig |> plotly::add_markers( + data = data, + x = ~x, + y = ~y, + name = "All genes", + marker = list( + color = base_color(), + size = 5 + ), + text = ~ glue::glue( + "{name}", + "
", + "{name_x}: {round(x, digits = 2)} ", + "({round(percentile.x * 100, digits = 2)}%)
", + "{name_y}: {round(y, digits = 2)} ", + "({round(percentile.y * 100, digits = 2)}%)" + ), + hoverinfo = "text" + ) + } + + fig <- fig |> plotly::add_lines( data = model_data, x = ~x, @@ -276,6 +300,7 @@ plot_rankings_correlation <- function(ranking_x, ) gene_set_index <- 1 + for (gene_set_name in names(gene_sets)) { gene_set <- gene_sets[[gene_set_name]] @@ -285,11 +310,19 @@ plot_rankings_correlation <- function(ranking_x, x = ~x, y = ~y, name = gene_set_name, - text = ~name, marker = list( color = gene_set_color(gene_set_index), size = 8 - ) + ), + text = ~ glue::glue( + "{name}", + "
", + "{name_x}: {round(x, digits = 2)} ", + "({round(percentile.x * 100, digits = 2)}%)
", + "{name_y}: {round(y, digits = 2)} ", + "({round(percentile.y * 100, digits = 2)}%)" + ), + hoverinfo = "text" ) gene_set_index <- gene_set_index + 1 @@ -565,7 +598,7 @@ plot_scores_by_position <- function(ranking, "Rank: {rank}
", "Percentile: {round(percentile * 100, digits = 2)}%" ), - marker = list( + marker = list( color = base_color(), size = 5 ), @@ -580,33 +613,33 @@ plot_scores_by_position <- function(ranking, yaxis = list(title = "Score") ) - index <- 1 + index <- 1 - for (gene_set_name in names(gene_sets)) { - gene_set_genes <- gene_sets[[gene_set_name]] + for (gene_set_name in names(gene_sets)) { + gene_set_genes <- gene_sets[[gene_set_name]] - fig <- fig |> - plotly::add_markers( - data = data[gene %chin% gene_set_genes], - x = ~x, - y = ~score, - name = gene_set_name, - text = ~ glue::glue( - "{name}
", - if (is.null(chromosome_name)) "Distance: " else "Position: ", - "{round(x / 1000000, digits = 2)} MBp
", - "Score: {round(score, digits = 2)}
", - "Rank: {rank}
", - "Percentile: {round(percentile * 100, digits = 2)}%" - ), - marker = list( - color = gene_set_color(index), - size = 8 - ), - hoverinfo = "text" - ) + fig <- fig |> + plotly::add_markers( + data = data[gene %chin% gene_set_genes], + x = ~x, + y = ~score, + name = gene_set_name, + text = ~ glue::glue( + "{name}
", + if (is.null(chromosome_name)) "Distance: " else "Position: ", + "{round(x / 1000000, digits = 2)} MBp
", + "Score: {round(score, digits = 2)}
", + "Rank: {rank}
", + "Percentile: {round(percentile * 100, digits = 2)}%" + ), + marker = list( + color = gene_set_color(index), + size = 8 + ), + hoverinfo = "text" + ) - index <- index + 1 + index <- index + 1 } fig diff --git a/man/plot_rankings_correlation.Rd b/man/plot_rankings_correlation.Rd index aa7e690..d6f9ab3 100644 --- a/man/plot_rankings_correlation.Rd +++ b/man/plot_rankings_correlation.Rd @@ -10,7 +10,8 @@ plot_rankings_correlation( name_x, name_y, gene_sets = NULL, - use_ranks = TRUE + use_ranks = TRUE, + use_sample = TRUE ) } \arguments{ @@ -26,6 +27,8 @@ plot_rankings_correlation( will be used to distinguish the sets and in the legend.} \item{use_ranks}{Show ranks instead of scores.} + +\item{use_sample}{Limit genes outside of the gene sets to a random sample.} } \description{ This function requires the package \code{plotly}.