如何使用ggplot绘制关联基因与聚类的带彩色侧边栏DotPlot
带基因来源聚类侧边栏的DotPlot实现方案
问题排查
你的现有代码存在三个核心问题:
- y轴映射错误:翻转后的DotPlot y轴为基因,你的侧边栏错误将y映射为cluster,导致顺序完全不匹配
- 颜色映射未显式绑定:未指定填充色和聚类的一一对应关系,R自动分配颜色导致和主图聚类色不一致
- 未对齐主图基因顺序:侧边栏基因顺序和主图不同步,会出现基因和对应聚类色块错位
修正后完整实现代码
步骤1:同步主图与侧边栏的基因顺序
# 提取主图p1的y轴基因顺序,保证两边完全匹配 gene_order <- levels(as.factor(ggplot_build(p1)$layout$panel_params[[1]]$y$get_labels())) # 重设top10_filter的gene因子顺序,和主图完全一致 top10_filter <- top10_filter %>% mutate(gene = factor(gene, levels = gene_order))
步骤2:生成匹配的聚类侧边栏
library(patchwork) labels <- ggplot(top10_filter, aes(x = 1, y = gene, fill = cluster)) + geom_tile(color = "white") + # 显式绑定填充色为你主图使用的聚类调色板,保证颜色完全一致 scale_fill_manual(values = my_palette_Rui_colors) + theme_void() + theme(legend.position = "none") + xlim(c(0.5, 1.5))
步骤3:拼接主图与侧边栏
# 调整宽度比例,主图占10份,侧边栏占1份,可根据需求调整 p1 + labels + plot_layout(widths = c(10, 1))
逻辑说明
参考示例的核心逻辑是用geom_tile生成色块映射分组属性,和你的需求完全适配:参考示例是x轴为聚类、填充映射细胞类型,你的需求是y轴为基因、填充映射基因来源聚类,仅调整轴映射方向即可复用逻辑。
注意事项:如果你的主图使用的聚类调色板是命名向量(键为聚类名、值为颜色),scale_fill_manual会自动匹配对应颜色,无需额外调整
内容的提问来源于stack exchange,提问作者Alvaro Regano
相关产品推荐
相关产品推荐

