Entering edit mode
6.2 years ago
Za
▴
140
Sorry,
This is a function in Seurat by which we can do a heat map
DoHeatmap <- function(
object,
data.use = NULL,
use.scaled = TRUE,
cells.use = NULL,
genes.use = NULL,
disp.min = -2.5,
disp.max = 2.5,
group.by = "ident",
group.order = NULL,
draw.line = TRUE,
col.low = "#FF00FF",
col.mid = "#000000",
col.high = "#FFFF00",
slim.col.label = FALSE,
remove.key = FALSE,
rotate.key = FALSE,
title = NULL,
cex.col = 10,
cex.row = 10,
group.label.loc = "bottom",
group.label.rot = FALSE,
group.cex = 15,
group.spacing = 0.15,
assay.type = "RNA",
do.plot = TRUE
) {
if (is.null(x = data.use)) {
if (use.scaled) {
data.use <- GetAssayData(object,assay.type = assay.type,slot = "scale.data")
} else {
data.use <- GetAssayData(object,assay.type = assay.type,slot = "data")
}
}
# note: data.use should have cells as column names, genes as row names
cells.use <- SetIfNull(x = cells.use, default = object@cell.names)
cells.use <- intersect(x = cells.use, y = colnames(x = data.use))
if (length(x = cells.use) == 0) {
stop("No cells given to cells.use present in object")
}
genes.use <- SetIfNull(x = genes.use, default = rownames(x = data.use))
genes.use <- intersect(x = genes.use, y = rownames(x = data.use))
if (length(x = genes.use) == 0) {
stop("No genes given to genes.use present in object")
}
if (is.null(x = group.by) || group.by == "ident") {
cells.ident <- object@ident[cells.use]
} else {
cells.ident <- factor(x = FetchData(
object = object,
cells.use = cells.use,
vars.all = group.by
)[, 1])
names(x = cells.ident) <- cells.use
}
cells.ident <- factor(
x = cells.ident,
labels = intersect(x = levels(x = cells.ident), y = cells.ident)
)
data.use <- data.use[genes.use, cells.use, drop = FALSE]
if ((!use.scaled)) {
data.use = as.matrix(x = data.use)
if (disp.max==2.5) disp.max = 10;
}
data.use <- MinMax(data = data.use, min = disp.min, max = disp.max)
data.use <- as.data.frame(x = t(x = data.use))
data.use$cell <- rownames(x = data.use)
colnames(x = data.use) <- make.unique(names = colnames(x = data.use))
data.use %>% melt(id.vars = "cell") -> data.use
names(x = data.use)[names(x = data.use) == 'variable'] <- 'gene'
names(x = data.use)[names(x = data.use) == 'value'] <- 'expression'
data.use$ident <- cells.ident[data.use$cell]
if(!is.null(group.order)) {
if(length(group.order) == length(levels(data.use$ident)) && all(group.order %in% levels(data.use$ident))) {
data.use$ident <- factor(data.use$ident, levels = group.order)
}
else {
stop("Invalid group.order")
}
}
breaks <- seq(
from = min(data.use$expression),
to = max(data.use$expression),
length = length(x = PurpleAndYellow()) + 1
)
data.use$gene <- with(
data = data.use,
expr = factor(x = gene, levels = rev(x = unique(x = data.use$gene)))
)
data.use$cell <- with(
data = data.use,
expr = factor(x = cell, levels = cells.use)
)
https://github.com/satijalab/seurat/blob/master/R/plotting.R
I am really not able to change this function to do heat map with URD R package. I mean enabling URD to do heat map by this function
Could somebody knowing R help me please?
What is the problem?
This function in seurat r package gives a heat map, is it possible to use this function with URD r package to plot a heat map as URD itself does not offer plotting such heat map
Why use URD package if it does not fit what you expect ? In R you can load multiples packages, use URD to do whatever you want and load also Seurat to plot what you want.
Right, you imagine groups of cells in URD object; Now, how I use seurat to do heat map on cell clusters of URD? I am using URD because URD make a tree of cells and seurat does not