Seurat::DoHeatmap Clustering Specific Genes

# Load necessary libraries
pacman::p_load(Seurat, dplyr, ggplot2, ComplexHeatmap)

# Extract Marker Genes ----------------------------------------------------
{
    # Load the Seurat object
    seuObj <- readRDS("your_seurat_object.Rds")
    # Preprocess the data
    seuObj <- seuObj %>% NormalizeData() %>% FindVariableFeatures() %>% ScaleData()
    # Load marker genes and filter based on criteria
    marker_genes <- readr::read_csv("marker_genes.csv") %>% filter(avg_log2FC > 0.2, p_val_adj <= 0.01)
    # Extract markers
    topGenes <- marker_genes %>% filter(cluster == "celltype.A") %>% pull(gene) %>% unique()
}

# Create a heatmap data matrix --------------------------------------------
htData <- Seurat::DoHeatmap(seuObj, features = topGenes, group.by = "cluster")$data %>% tidyr::drop_na()

{
    htData.mtx <- htData %>% 
        select(Feature, Cell, Expression) %>% 
        tidyr::pivot_wider(names_from = Cell, values_from = Expression, values_fill = NA) %>% 
        tibble::column_to_rownames("Feature")
    
    colAnnot <- htData %>% 
        select(Cell, Identity) %>% 
        distinct(Cell, .keep_all = TRUE) %>% 
        mutate(Identity = as.vector(Identity), Cell = as.vector(Cell)) %>% 
        filter(Cell %in% colnames(htData.mtx)) %>% 
        arrange(Identity) %>% 
        tibble::column_to_rownames("Cell")
    
    htData.mtx <- htData.mtx[, rownames(colAnnot)]
}


# Create and save the heatmap ---------------------------------------------
ht <- Heatmap(
    as.matrix(htData.mtx),# Convert the data matrix to a matrix format for the heatmap
    name = "Enhance Heatmap",# Name of the heatmap displayed in the legend
    show_column_names = FALSE,# Do not display the column names (e.g., sample names)
    row_names_side = 'left',# Display row names (e.g., gene names) on the left side
    column_split = as.factor(colAnnot$Identity),# Split columns based on the 'Identity' factor from colAnnot
    cluster_rows = TRUE,# Perform hierarchical clustering on the rows (genes)
    show_row_dend = FALSE,# Do not display the dendrogram for rows
    cluster_columns = TRUE,# Perform hierarchical clustering on the columns (samples)
    cluster_column_slices = FALSE,# Do not perform clustering on column slices after splitting
    show_column_dend = FALSE,# Do not display the dendrogram for columns
    show_parent_dend_line = FALSE,# Do not show the lines of the parent dendrogram
    top_annotation = HeatmapAnnotation(Idents = colAnnot$Identity, show_legend = FALSE),# Add a top annotation to the heatmap showing the identities, without a legend
    col = colorRampPalette(c("#ec00ec", "#010001", "#fbfb00"))(n = 100),# Define the color palette for the heatmap, ranging from magenta to black to yellow
    row_km = 5,# Split rows into 5 groups using k-means clustering
    row_names_gp = gpar(fontsize = 8),# Set the font size for the row names
    # Configure the heatmap legend with specific parameters
    heatmap_legend_param = list(
        at = c(-2, 0, 2),  # Legend ticks at -2, 0, and 2
        title = "Scaled.Expression",  # Title of the legend
        legend_height = unit(6, "cm"),  # Height of the legend
        title_position = "leftcenter-rot"  # Position of the title
    )
)

# Capture the heatmap 'ht' as a graphical object using 'grid.grabExpr' and store it in 'p'
p <- grid.grabExpr(draw(ht))

# Save the heatmap to a file
ggsave(filename = "heatmap_example.jpg", plot = p, width = 22, height = 12, dpi = 300)

Reference

DoHeatmap clustering specific genes and not top x genes · Issue #2261 · satijalab/seurat (github.com)

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容