#' Show Copy Number Sequence Logos
#' @inheritParams ggseqlogo2
#' @inheritParams build_sub_matrix
#' @param x a character vector of sequences or named list of sequences. All sequences must have same width.
#' @param recode if `TRUE`, it will use default indicator or specified indicator to show the letters in
#' the plot
#' @param indicator a named vector (like a dictory) to change letters one to one in the plot.
#' @return a `ggplot` object
#' @export
#' @examples
#' p1 <- show_seq_logo(sapply(split(LETTERS[1:24], 1:4), function(x) paste0(x, collapse = "")))
#' p1
#' p2 <- show_seq_logo(sapply(split(LETTERS[1:24], 1:4), function(x) paste0(x, collapse = "")),
#' recode = TRUE
#' )
#' p2
#' p3 <- show_seq_logo(sapply(split(LETTERS[1:6], 1:2), function(x) paste0(x, collapse = "")),
#' simple_version = TRUE
#' )
#' @testexamples
#' expect_is(p1, "ggplot")
#' expect_is(p2, "ggplot")
#' expect_is(p3, "ggplot")
#' expect_error(show_seq_logo(sapply(split(LETTERS[1:24], 1:4),
#' function(x) paste0(x, collapse = "")), indicator = 1:24, recode = TRUE))
show_seq_logo <- function(x, method = c("prob", "bits"),
simple_version = FALSE,
ncol = NULL, nrow = NULL,
recode = FALSE, indicator = NULL, ...) {
method <- match.arg(method)
## copy from sigminer utils.R
reds <- sapply(list(c(252, 138, 106), c(241, 68, 50), c(188, 25, 26)),
FUN = function(x) rgb2hex(x[1], x[2], x[3])
) %>% as.character()
blues <- sapply(list(c(74, 152, 201), c(23, 100, 171)),
FUN = function(x) rgb2hex(x[1], x[2], x[3])
) %>% as.character()
if (simple_version) {
cs <- ggseqlogo::make_col_scheme(
chars = LETTERS[1:6],
groups = c(
rep("2 copy DEL", 1),
rep("1 copy DEL", 1),
rep("Normal", 1),
rep("1 copy AMP", 1),
rep("2 copy AMP", 1),
rep("3+ copy AMP", 1)
),
cols = c(
rep("blue", 1),
rep(blues[1], 1),
rep("black", 1),
rep(reds[1], 1),
rep(reds[2], 1),
rep(reds[3], 1)
),
name = "Segment type"
)
ns <- LETTERS[1:6]
} else {
cs <- ggseqlogo::make_col_scheme(
chars = LETTERS[1:24],
groups = c(
rep("2 copy DEL", 4),
rep("1 copy DEL", 4),
rep("Normal", 4),
rep("1 copy AMP", 4),
rep("2 copy AMP", 4),
rep("3+ copy AMP", 4)
),
cols = c(
rep("blue", 4),
rep(blues[1], 4),
rep("black", 4),
rep(reds[1], 4),
rep(reds[2], 4),
rep(reds[3], 4)
),
name = "Segment type"
)
ns <- LETTERS[1:24]
}
if (recode) {
if (is.null(indicator)) {
if (isFALSE(simple_version)) {
indicator <- rep(c("S", "M", "L", "E"), 6)
names(indicator) <- LETTERS[1:24]
}
} else {
if (is.null(names(indicator))) {
stop("The indicator should have names to map.")
}
}
} else {
indicator <- NULL
}
ggseqlogo2(x,
ncol = ncol,
nrow = nrow,
method = method,
namespace = ns,
col_scheme = cs,
idor = indicator,
...
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.