Nothing
#' Generate plot of TMA point process
#'
#' @description This function generates plot of point process in rectangular or circular window.
#' @param mif MIF object created using create_MIF().
#' @param plot_title Character string or vector of character strings of variable name(s) to serve as plot title(s).
#' @param mnames Character vector containing marker names.
#' @param filename Character string of file name to store plots. Plots are generated as single .pdf file.
#' @param mcolors Character vector of color names to display markers in the plot.
#' @param cell_type Character vector of cell type
#' @param path Different path than file name or to use in conjunction with filename ???
#'
#' @return mif object and the ggplot objects can be viewed form the derived slot of the mif object
#'
#' @importFrom rlang .data
#' @importFrom grDevices dev.off
#'
#' @export
#'
#' @examples
#' #Create mif object
#' library(dplyr)
#' x <- create_mif(clinical_data = example_clinical %>%
#' mutate(deidentified_id = as.character(deidentified_id)),
#' sample_data = example_summary %>%
#' mutate(deidentified_id = as.character(deidentified_id)),
#' spatial_list = example_spatial,
#' patient_id = "deidentified_id",
#' sample_id = "deidentified_sample")
#'
#' mnames_good <- c("CD3..Opal.570..Positive","CD8..Opal.520..Positive",
#' "FOXP3..Opal.620..Positive","PDL1..Opal.540..Positive",
#' "PD1..Opal.650..Positive","CD3..CD8.","CD3..FOXP3.")
#'
#' x <- plot_immunoflo(x, plot_title = "deidentified_sample", mnames = mnames_good,
#' cell_type = "Classifier.Label")
#'
#' x[["derived"]][["spatial_plots"]][[4]]
plot_immunoflo <- function(
mif,
plot_title,
mnames,
# pretty_labels = TRUE,
mcolors = NULL,
cell_type = NULL,
filename = NULL,
path = NULL
) {
### changes to make
# 1. input will be new data type
# 2. plot to pdf unless given subset of samples
# convert to list of dataframes - throw error message if missing
if (missing(mif)) stop("MIF is missing; please provide the appropriate data")
if (!is(mif, "mif")) stop("Please use a mif object")
# if (is.data.frame()) dlist = list(dlist) - need to change to MIF object
# if (missing(filename)) stop("filename is missing; filename must be a string")
# progress bar for creating plots
pb <- dplyr::progress_estimated(length(mif[["spatial"]]))
# plots
plot <- lapply(mif[["spatial"]], function(x){
# update progress bar
pb$tick()$print()
# data to generate plot
plot_data <- x %>%
dplyr::select(plot_title, .data$XMin, .data$XMax,
.data$YMin, .data$YMax, !!mnames, cell_type) %>%
tidyr::pivot_longer(cols = !!mnames,
names_to = "marker", values_to = "indicator") %>%
dplyr::mutate(xloc = (.data$XMin + .data$XMax) / 2,
yloc = (.data$YMin + .data$YMax) / 2,
marker = factor(.data$marker, levels = mnames))
# plot title
plot_title <- if (length(plot_title) == 1) {
paste0("ID: ", unique(x[[plot_title]]))
} else {
paste0("ID: ", paste(unique(x[, plot_title]), collapse = ", "))
}
# color palette
if (is.null(mcolors)) {
# viridis prints better (BW) and easily read (colorblindness)
#mcolors = viridisLite::viridis(length(mnames), option = "viridis")
#Set2 is not particularly pretty, but it is colorblind friendly
#Ram had used 'Paired' which is also colorblind friendly.
mcolors = RColorBrewer::brewer.pal(length(mnames), "Paired")
}
if(is.null(cell_type)){
basic_plot <- plot_data %>%
dplyr::filter(.data$indicator == 1) %>%
ggplot2::ggplot(ggplot2::aes(x = .data$xloc,
y = .data$yloc,
color = .data$marker)) +
# ggplot2::geom_point(data = filter(plot_data, indicator == 0),
# # aes(fill = "grey70"),
# color = "gray70") +
ggplot2::geom_point(data = plot_data[plot_data$indicator == 0,],
# aes(fill = "grey70"),
color = "gray70") +
ggplot2::geom_point(size = 3) +
ggplot2::scale_x_continuous(breaks = scales::pretty_breaks(5)) +
ggplot2::scale_y_continuous(breaks = scales::pretty_breaks(5)) +
ggplot2::ggtitle(plot_title) +
ggplot2::scale_color_manual(NULL, values = mcolors, drop = FALSE) +
ggplot2::theme_bw(base_size = 18) +
ggplot2::theme(axis.title = ggplot2::element_blank(),
panel.grid = ggplot2::element_blank())
}else{
basic_plot <- plot_data %>%
dplyr::filter(.data$indicator == 1) %>%
ggplot2::ggplot(ggplot2::aes(x = .data$xloc,
y = .data$yloc,
color = .data$marker,
shape = .data[[cell_type]])) +
# ggplot2::geom_point(data = filter(plot_data, indicator == 0),
# # aes(fill = "grey70"),
# color = "gray70") +
ggplot2::geom_point(data = plot_data[plot_data$indicator == 0,],
# aes(fill = "grey70"),
color = "gray70") +
ggplot2::geom_point(size = 3) +
ggplot2::scale_x_continuous(breaks = scales::pretty_breaks(5)) +
ggplot2::scale_y_continuous(breaks = scales::pretty_breaks(5)) +
ggplot2::ggtitle(plot_title) +
ggplot2::scale_color_manual(NULL, values = mcolors, drop = FALSE) +
ggplot2::scale_shape_manual(NULL, values = c(3, 16), drop = FALSE) +
ggplot2::theme_bw(base_size = 18) +
ggplot2::theme(axis.title = ggplot2::element_blank(),
panel.grid = ggplot2::element_blank())
}
basic_plot = basic_plot +
ggplot2::scale_y_reverse()
return(basic_plot)
})
# output to pdf if filename is specified
if(!is.null(filename)){
grDevices::pdf(sprintf("%s.pdf",filename), height = 10, width = 10)
on.exit(dev.off())
invisible(
lapply(seq_along(plot), function(x) {
print(plot[[x]])
})
)
grDevices::dev.off()
}
mif$derived$spatial_plots = plot
return(mif)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.