#' @title Plot coessential genes
#'
#' @description Generates a ranked scatter plot of cossential genes from `annotate` outputs
#'
#' @param result_df data frame, A data frame output from `annotate_df()`, Default: NULL
#' @param inflection_df data frame, A data frame output from `get_inflection_points()`, Default: NULL
#' @param label_genes logical, TRUE to trigger gene name labeling, Default: FALSE
#' @param label_n integer, Number of genes from either end to label, Default: 1
#'
#' @return A plot generated by ggplot2, additional ggplot layers can be applied directly using `+`
#' @md
#'
#' @examples
#' gretta_data_dir <- './GRETTA_example/'
#' gretta_output_dir <- './GRETTA_example_output/'
#'
#' if(!dir.exists(gretta_data_dir)){
#' download_example_data(".")
#' }
#'
#' load(paste0(
#' gretta_data_dir,'/sample_22Q2_ARID1A_coessential_result.rda'),
#' envir = environment())
#' load(paste0(
#' gretta_data_dir,'/sample_22Q2_ARID1A_coessential_inflection.rda'),
#' envir = environment())
#'
#' plot_coess(
#' result_df = coess_df,
#' inflection_df = coess_inflection_df,
#' label_genes = FALSE)
#'
#' @rdname plot_coess
#' @export
#' @importFrom dplyr mutate filter arrange case_when
#' @importFrom ggplot2 ggplot aes geom_hline geom_point scale_colour_identity scale_x_reverse scale_y_continuous theme theme_light
#' @importFrom stringr str_split_fixed
#' @importFrom ggrepel geom_label_repel
plot_coess <- function(result_df = NULL, inflection_df = NULL,
label_genes = FALSE, label_n = NULL) {
# Check data is provided
if (is.null(result_df)) {
stop("No result data frame provided")
}
if (is.null(inflection_df)) {
stop("No inflection data frame provided")
}
# Extract gene_names only
plot_df <- result_df %>%
dplyr::mutate(GeneName_B = stringr::str_split_fixed(.data$GeneNameID_B,
"_", 2)[, 1]) %>%
dplyr::arrange(.data$Rank)
# Extract genes to label if indicated
if (label_genes == TRUE) {
if (is.null(label_n)) {
label_n <- 1
}
pos_gene <- plot_df %>%
dplyr::arrange(.data$Rank) %>%
dplyr::slice(seq_len(label_n)) %>%
dplyr::pull(.data$GeneName_B)
neg_gene <- plot_df %>%
dplyr::arrange(-.data$Rank) %>%
dplyr::slice(seq_len(label_n)) %>%
dplyr::pull(.data$GeneName_B)
Label_on_plot <- c(pos_gene, neg_gene)
} else {
Label_on_plot <- c("")
}
# get cor. coef of threshold
pos_inflection_cor <- plot_df %>%
dplyr::filter(.data$Rank <= inflection_df$Inflection_point_pos_byRank) %>%
dplyr::pull(.data$estimate) %>%
min
neg_inflection_cor <- plot_df %>%
dplyr::filter(.data$Rank >= inflection_df$Inflection_point_neg_byRank) %>%
dplyr::pull(.data$estimate) %>%
max
plot_df <- plot_df %>%
dplyr::mutate(Label_on_plot = ifelse(.data$GeneName_B %in%
Label_on_plot, TRUE, FALSE), Candidate_gene = ifelse(.data$Padj_BH <
0.05 & (.data$estimate > pos_inflection_cor |
.data$estimate < neg_inflection_cor), TRUE,
FALSE), point_colour = ifelse(.data$Candidate_gene ==
TRUE, "red", "grey"))
plot <- ggplot2::ggplot(plot_df, ggplot2::aes(x = .data$Rank,
y = .data$estimate, colour = .data$point_colour,
label = ifelse(.data$Label_on_plot, .data$GeneName_B,
""))) + ggplot2::geom_hline(yintercept = c(pos_inflection_cor,
neg_inflection_cor), linetype = "dashed", colour = c("dark grey")) +
ggplot2::geom_point() + ggrepel::geom_text_repel(seed = 4,
colour = "black", min.segment.length = 0, box.padding = 0.25,
nudge_x = -1000, max.overlaps = Inf) + ggplot2::scale_colour_identity() +
ggplot2::scale_y_continuous(limits = c(-1,
1), breaks = seq(-1, 1, by = 0.25)) + ggplot2::theme_light() +
ggplot2::scale_x_reverse() + ggplot2::theme(text = ggplot2::element_text(size = 12)) +
ggplot2::ylab("Pearson correlation coefficient") +
ggplot2::xlab("")
return(plot)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.