#' @rdname plot_gene_heatmap
#'
#' @param window_prop the size of flanking region to plot. Can be a vector of two
#' values for left and right window size. Values indicate proportion of gene
#' length.
#' @param pos_style the style for plotting the base positions along the x-axis.
#' Defaults to "to_scale", plotting (potentially) overlapping squares
#' along the genomic position to scale. The "compact" options plots only the
#' positions with measured modification.
#' @param subsample the number of read of packed read rows to subsample to.
#'
#' @return a ggplot plot containing the heatmap.
#'
#' @examples
#' nmr <- load_example_nanomethresult()
#' plot_gene_heatmap(nmr, "Peg3")
#'
#' @export
setMethod(
"plot_gene_heatmap",
signature(x = "NanoMethResult", gene = "character"),
function(
x,
gene,
window_prop = 0.3,
pos_style = c("to_scale", "compact"),
subsample = 50
) {
pos_style <- match.arg(pos_style)
plot_gene_heatmap_impl(
x = x,
gene = gene,
window_prop = window_prop,
pos_style = pos_style,
subsample = subsample
)
}
)
#' @rdname plot_gene_heatmap
#'
#' @export
setMethod(
"plot_gene_heatmap",
signature(x = "ModBamResult", gene = "character"),
function(
x,
gene,
window_prop = 0.3,
pos_style = c("to_scale", "compact"),
subsample = 50
) {
pos_style <- match.arg(pos_style)
plot_gene_heatmap_impl(
x = x,
gene = gene,
window_prop = window_prop,
pos_style = pos_style,
subsample = subsample
)
}
)
plot_gene_heatmap_impl <- function(
x,
gene,
window_prop,
pos_style,
subsample
) {
assertthat::assert_that(
nrow(exons(x)) > 0,
msg = "exons(x) is empty, gene cannot be queried"
)
if (length(window_prop) == 1) {
# convert to two sided window
window_prop <- c(window_prop, window_prop)
}
# query_gene_methy
if (!gene %in% exons(x)$symbol) {
stop(glue::glue("gene {gene} not found in exon annotation"))
}
pos_range <- gene_pos_range(x, gene)
chr <- exons(x) %>%
dplyr::filter(.data$symbol == gene) %>%
dplyr::slice(1) %>%
dplyr::pull(chr)
plot_region_heatmap_impl(
x = x,
chr = chr,
start = pos_range[1],
end = pos_range[2],
window_prop = window_prop,
pos_style = pos_style,
subsample = subsample
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.