2023-11-28-直播单细胞图表美化-seurat数据结构 featureplot dotplot vlnplot

单细胞常见的可视化方式有DimPlot,FeaturePlot ,DotPlot ,VlnPlot 和 DoHeatmap几种 ,Seurat中均可以很简单的实现,但是文献中的图大多会精美很多。

之前 跟SCI学umap图| ggplot2 绘制umap图,坐标位置 ,颜色 ,大小还不是你说了算 介绍过DimPlot的一些调整方法。

本文介绍FeaturePlot的美化方式,包含以下几个方面 :

(1)调整点的颜色 ,大小

(2)展示基因共表达情况(点图,密度图

(3)优化Seurat分组展示

(4)ggplot2修改theme ,lengend等

(5)批量绘制

一 载入R包,数据

仍然使用之前注释过的sce.anno.RData数据 ,后台回复 anno 即可获取

library(Seurat)
library(tidyverse)
library(scCustomize) # 需要Seurat版本4.3.0
library(viridis)
library(RColorBrewer)
library(gridExtra)

load("sce.anno.RData")
head(sce2,2)

这里额外安装scCustomize包,该R包对上面提到的Seurat 常用绘图函数进行了一些优化,但是需要Seurat版本4.3.0 以上

二 FeaturePlot 相关

1,调整FeaturePlot颜色,大小

(1)Seurat 修改

有以下几种方式,可以使用FeaturePlot 内置的cols参数进行修改(p2 , p3),也可以使用ggplot2的方式 添加scale 进行修改(p4)

p1 <- FeaturePlot(object = sce2, features = "CD3D") 

p2 <- FeaturePlot(sce2, "CD3D", cols = c("#F0F921FF", "#7301A8FF"))

p3 <- FeaturePlot(sce2, "CD3D", cols = brewer.pal(10, name = "RdBu"))

p4 <- FeaturePlot(object = sce2, features = "CD3D") + 
  scale_colour_gradientn(colours = rev(brewer.pal(n = 10, name = "RdBu")))

注意左下p3 ,legend是有问题的,会随col参数中brewer.pal(10, name = "RdBu")中的10的数值而变动。

修改大小的话很简单,直接调整 pt.size = 1 即可,此处不做演示。

(2)scCustomize 修改

p11 <- FeaturePlot_scCustom(seurat_object = sce2, features = "CD3D")

p22 <- FeaturePlot_scCustom(seurat_object = sce2, features = "CD3D", colors_use = brewer.pal(11, name = "RdBu"),order = T)

p11 + p22

这里cols参数是没有问题的。

2 ,多基因共“表达”

单个基因就按照上面的方法直接绘制即可,如果想同时显示2个基因呢?

(1)Seurat 中提供了 blend = TRUE 函数,来可视化两个基因的共表达情况

FeaturePlot(sce2, features = c("MS4A1", "CD79A"), blend = TRUE)

注意blend = TRUE函数只能适用于2个基因,多个基因会报错 。

如果想实现多个基因的话,将目标基因和UMAP 的坐标提取出来使用ggplot2绘制即可 或者 使用scCustomize 包中的多基因联合密度图 ,如下。

(2)scCustomize 多基因联合密度图

密度图是通过Nebulosa包实现的,因此需要先安装Nebulosa 包 。然后用Plot_Density_Joint_Only()函数即可以同时绘制多个基因的联合密度图 ,可以不限于2个基因 。

BiocManager::install("Nebulosa")
#单基因
p000 <- Plot_Density_Custom(seurat_object = sce2, features = "CD3D")
#双基因
p111 <- Plot_Density_Joint_Only(seurat_object = sce2, 
                                features = c("CD3D", "CD3E"))
#多基因
p222 <- Plot_Density_Joint_Only(seurat_object = sce2, 
                                features = c("CD3D", "CD3E","CD79A"),
                                custom_palette = BlueAndRed())
p000 + p111 + p222

可以通过custom_palette 函数调整颜色,选择较少 。

除了展示共表达外,还可展示目标celltype的几个marker来辅助细胞类型鉴定。

3 , 分组相关

很多时候会需要分样本/分组展示重点基因来进行表达的比较,

(1)Seurat有 split.by 函数 ,虽然可以设置ncol,但是没有效果,如图所示,

sce2sub <- subset(sce2 ,group == "PT")
FeaturePlot(sce2sub, "CD3D", cols = brewer.pal(11, name = "RdBu"),
            pt.size = 1,
            split.by = "sample" ,ncol = 4)

(2)scCustomize 中FeaturePlot_scCustom函数 ,算是修正了这个小bug

FeaturePlot_scCustom(seurat_object = sce2, features = "CD3D", split.by = "orig.ident",
                     num_columns = 4)

4 ,ggplot2 修改theme / legend 相关

类似前面使用ggplot2的scale修改颜色,当然也可以修改theme等一系列

FeaturePlot(object = sce2, features = "CD3D",pt.size = 1,order = T) + 
  scale_colour_gradientn(colours = rev(brewer.pal(n = 10, name = "RdBu"))) + 
  DarkTheme() + 
  theme(text=element_text(size=14))+ 
  theme(text=element_text(face = "bold"))+
  theme(legend.text=element_text(size=8))

此处简单的示例,更多的参考ggplot2 | 关于标题,坐标轴和图例的细节修改,你可能想了解 , ggplot2|theme主题设置,详解绘图优化-“精雕细琢” ,和ggplot2 |legend参数设置,图形精雕细琢

5 批量绘制

当有多个基因需要绘制时候,需要批量绘制 。

(1)features 可以接受向量,因此可以直接完成

marker_sign <- c("CD3E", 'CD3D', 'EPCAM', 'CD4', 'CD8A','SPP1', 'CD19', 'COL1A1', 'IGLC1')
FeaturePlot(sce2,features = marker_sign)

(2)grid.arrange 方式绘制

grid.arrange接受的是list ,可以通过layout_matrix 调整布局 。当然也可以最开始调整好基因在向量中的顺序,Seurat的结果是一样的 。

intersect_tls <- intersect(marker_sign,rownames(sce2)) 
plot_list <- lapply(intersect_tls,function(x){
  plot_list <- FeaturePlot(sce2,
                               features = x)
  })
#设置布局
lay <- rbind(c(1,2,3),
             c(4,5,6),
             c(7,8,9))

grid.arrange(grobs = plot_list, layout_matrix = lay)

因为单细胞的FeaturePlot的都是样的,看不出来grid.arrange的优势,后面会介绍空转中使用该函数通过布局 和 选择展示的图片 来绘制CNS级别的主图。

1. tsne展示marker基因

FeaturePlot(mye.seu,features = "CCR7",reduction = "tsne",pt.size = 1)+
  scale_x_continuous("")+scale_y_continuous("")+
  theme_bw()+ #改变ggplot2的主题
  theme( #进一步修改主题
    panel.grid.major = element_blank(),panel.grid.minor = element_blank(), #去掉背景线
    axis.ticks = element_blank(),axis.text = element_blank(), #去掉坐标轴刻度和数字
    legend.position = "none", #去掉图例
    plot.title = element_text(hjust = 0.5,size=14) #改变标题位置和字体大小
  )
ggsave("CCR7.pdf",device = "pdf",width = 10,height = 10.5,units = "cm")  

另一种方法就是把tsne的坐标和基因的表达值提取出来,用ggplot2画,其实不是很必要,因为FeaturePlot也是基于ggplot2的,我还是演示一下

mat1=as.data.frame(mye.seu[["RNA"]]@data["CCR7",])
colnames(mat1)="exp"
mat2=Embeddings(mye.seu,"tsne")
mat3=merge(mat2,mat1,by="row.names")

#数据格式如下:
> head(mat3)
Row.names     tSNE_1     tSNE_2   exp
1 N01_AAACGGGCATTTCAGG_1   5.098727  32.748145 0.000
2 N01_AAAGATGCAATGTAAG_1 -24.394040  26.176422 0.000
3 N01_AACTCAGGTAATAGCA_1  11.856730   8.086553 0.000
4 N01_AACTCAGGTCTTCGTC_1  10.421878  12.660407 0.000
5 N01_AACTTTCAGGCCATAG_1  33.555756 -10.437406 1.606
6 N01_AAGACCTTCGAATGGG_1 -23.976967  11.897753 0.738

mat3%>%ggplot(aes(tSNE_1,tSNE_2))+geom_point(aes(color=exp))+
  scale_color_gradient(low = "grey",high = "purple")+theme_bw()
ggsave("CCR7.2.pdf",device = "pdf",width = 13.5,height = 12,units = "cm")

用ggplot2的好处就是图形修改很方便,毕竟ggplot2大家都很熟悉

2. 热图展示marker基因

画图前,需要给每个细胞一个身份,因为我们跳过了聚类这一步,此处需要手动赋值

Idents(mye.seu)="celltype"

library(xlsx)
markerdf1=read.xlsx("ref_marker.xlsx",sheetIndex = 1)
markerdf1$gene=as.character(markerdf1$gene)
# 这个表格整理自原文的附表,选了53个基因

#数据格式
# > head(markerdf1)
# gene   celltype
# 1    S100B DC2(CD1C+)
# 2 HLA-DQB2 DC2(CD1C+)
# 3   FCER1A DC2(CD1C+)
# 4     CD1A DC2(CD1C+)
# 5     PKIB DC2(CD1C+)
# 6    NDRG2 DC2(CD1C+)

DoHeatmap(mye.seu,features = markerdf1$gene,label = F,slot = "scale.data")
ggsave("heatmap.pdf",device = "pdf",width = 23,height = 16,units = "cm")

label = F不在热图的上方标注细胞类型,
slot = "scale.data"使用scale之后的矩阵画图,默认就是这个

接下来用pheatmap画,在布局上可以自由发挥

library(pheatmap)
colanno=mye.seu@meta.data[,c("CB","celltype")]
colanno=colanno%>%arrange(celltype)
rownames(colanno)=colanno$CB
colanno$CB=NULL
colanno$celltype=factor(colanno$celltype,levels = unique(colanno$celltype))

先对细胞进行排序,按照celltype的顺序,然后对基因排序

rowanno=markerdf1
rowanno=rowanno%>%arrange(celltype)

提取scale矩阵的行列时,按照上面的顺序

mat4=mye.seu[["RNA"]]@scale.data[rowanno$gene,rownames(colanno)]
mat4[mat4>=2.5]=2.5
mat4[mat4 < (-1.5)]= -1.5 #小于负数时,加括号!

下面就是绘图代码了,我加了分界线,使其看上去更有区分度

pheatmap(mat4,cluster_rows = F,cluster_cols = F,
         show_colnames = F,
         annotation_col = colanno,
         gaps_row=as.numeric(cumsum(table(rowanno$celltype))[-6]),
         gaps_col=as.numeric(cumsum(table(colanno$celltype))[-6]),
         filename="heatmap.2.pdf",width=11,height = 7
         )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/198483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 C# 中复制 Word、Excel、PDF 和 PPT 文档

在 C# 中复制文档可能是各种软件应用程序中的一项基本任务。无论您是构建文件管理系统、创建备份实用程序&#xff0c;还是出于任何原因仅需要复制文档&#xff0c;都需要高效的文件处理和复制机制。在这篇博文中&#xff0c;我们将引导您逐步完成在 C# 中复制文档的过程。在代…

pgsql分别获取日期中的年、月、日,并处理前台展示有小数点的情况

使用extract()函数 select extract(YEAR from 需要处理的日期字段) from tablename; --获取年份 select extract(MONTH from 需要处理的日期字段) from tablename; --获取月份 select extract(DAY from 需要处理的日期字段) from tablename; --获取日 实际应用&#xff1a;…

宠物网站的技术 SEO:完整指南

您是宠物行业网站的从业者吗&#xff1f;那么您一定知道&#xff0c;当人们寻找与宠物相关的资源时&#xff0c;在搜索引擎结果中排名靠前有多么重要。 这就是技术SEO的用武之地&#xff01;它正在调整您网站的后端代码和服务器配置&#xff0c;以在 SERP 中排名更高。 在此&…

Vue3-目录调整

默认生成的目录结构不满足我们的开发需求&#xff0c;所以这里需要做一些自定义改动。 主要是以下工作&#xff1a; 1.删除一些初始化的默认文件 2.修改剩余代码内容 3.新增调整我们需要的目录结构 在src文件夹下创建两个新文件夹&#xff0c;一个叫api&#xff08;请求模…

uniapp+微信小程序监听返回事件

代码附在最后 适用场景&#xff1a;uniapp开发微信小程序 需求是我点击列表进入数据信息的详情界面&#xff0c;点击详情界面的收藏&#xff0c;返回上一界面后&#xff0c;更新列表中的收藏情况。 目录 一、使用onUnload监听页面卸载 二、使用getCurrentPages()获取当前页…

UniApp项目中 使用微信小程序原生语言 进行开发

看效果 wxcomponents 下放的是微信小程序原生代码写的组件。我进行了封装 上干货 在你下uniApp 项目的根目录创建一个 wxcomponents 名字千万不要错 京东、支付宝灯参考下面图片 官方文档也有介绍 然后在你需要引入原生功能的页面里面引入你的组件&#xff08;我这里提前已经放…

深度学习之图像分类(十五)DINAT: Dilated Neighborhood Attention Transformer理论精简摘要(二)

Dilated Neighborhood Attention Transformer摘要 局部注意力机制&#xff1a;例如滑动窗口Neighborhood Attention&#xff08;NA&#xff09;或Swin Transformer的Shifted Window Self Attention。 优点&#xff1a;尽管在降低自注意力二次复杂性方面表现出色&#xff0c; …

【Web】SWPUCTF 2022 新生赛 个人复现

目录 ①webdog1__start ②ez_rce ③ez_sql ④ez_1zpop ⑤file_maste ⑥Power! 挑了部分题&#xff0c;太简单的就没选进来&#xff08;但选进来≠有难度&#xff09; ①webdog1__start 进来没啥东西&#xff0c;右键查看源码 对于0e215962017&#xff0c;md5后也是以…

ACM程序设计课内实验(1)数学问题

1.The Hardest Problem Ever Description Julius Caesar生活在一个危险而又充斥着阴谋的时代。Caesar面对的最难的情况关系着他的存亡。为了让自己生存&#xff0c;他决心去创造第一种加密方法之一。这个加密方法听起来是这样的令人难以置信&#xff0c;没有一个人可以指出它&a…

视频集中存储/磁盘阵列EasyCVR平台黑名单异常解决步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

figma 基础使用 —— 常用方法

一、 导入组件 分成两种方式 &#xff08;1&#xff09;离线的包导入&#xff08;iOS 常用组件.fig 直接拖拽到figma最近网页&#xff09; &#xff08;2&#xff09;在插件市场下载https://www.figma.com/community 二、figma中使用标尺 快捷键&#xff1a;shift R 三、插…

vue实现动态路由菜单!!!

目录 总结一、步骤1.编写静态路由编写router.jsmain.js注册 2.编写permisstions.js权限文件编写permisstions.jsaxios封装的APIstore.js状态库system.js Axios-APIrequest.js axios请求实例封装 3.编写菜单树组件MenuTree.vue 4.主页中使用菜单树组件 总结 递归处理后端响应的…

5面试题--redis

慢查询⽇志&#xff1a;⽤于记录执⾏时间超过给定时⻓的命令请求&#xff0c;⽤户可以通过这个功能产⽣的⽇志来监视和 优化查询速度。 布隆过滤器&#xff1a;⼆进制数组进⾏存储&#xff0c;若判断元素存在则可能实际存在&#xff0c;若判断不存在则⼀定不存在。 redis中inc…

231128 刷题日报

值班刷题的第二天&#xff0c;早上地铁上看了一道题&#xff0c;以为很简单 LCR 019. 验证回文串 II 我的思路是引入计数器左右指针&#xff0c;然而 Leetcode老哥提醒了我&#xff1a; 你看看这个字符串“lcuxxucul”&#xff0c;你的默认优先删除左边&#xff0c;但是删除…

SystemVerilog 入门

文章目录 包定义SystemVerilog 数据类型结构体 SystemVerilog 过程块可嵌套模块接口 System Verilog 的优点 提高了硬件建模能力、编码效率和抽象能力&#xff1b;RTL 级、系统级行为描述&#xff1b; 增强了验证能力和为大规模复杂设计编写有效、无竞争测试程序的断言功能&am…

ESP32-Web-Server 实战编程-使用文件系统建立强大的 web 系统

ESP32-Web-Server 实战编程-使用文件系统建立强大的 web 系统 概述 在前述章节我们讲述了在网页端控制多个 GPIO 的案例。当程序开始变得复杂&#xff0c;让一些功能“自动起来”是一个好的选择。 在前面的示例中&#xff0c;我们需要在后端为每个前端代码的 URL 指定一个对…

类和对象——(2)类

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 只虽然夜晚很长&#xff0c;但天…

选择排序以及改进方案

选择排序以及改进方案 介绍&#xff1a; 选择排序是一种简单直观的排序算法&#xff0c;它的基本思想是在未排序序列中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放在已排序序列的末尾。选择排序的过程就像是每次从待排序的元素中选择最小的一个&…

C51--4G模块

EC03-DNC&#xff1a;4G通信模块 EC03-DNC 功能特点&#xff1a; 采用最新4G CAT1方案&#xff1b; 支持数据透明传输; 支持TCP、UDP 网络协议; 支持心跳包、注册包功能最大支持64个字节数&#xff1b; 支持MQTT协议&#xff0c;支持接入OneNet平台、百度云平台、阿里云平台的…

计网Lesson4 - 计算机组网模型

文章目录 计算机的连接方式1. 两台计算机的互联2. 多台计算机的互联&#xff08;旧式&#xff09;3. 多台计算机的互联 --- 集线器&#xff08;Hub&#xff09;4. 网桥5. 多台计算机的互联 --- 交换器&#xff08;Switch&#xff09; 计算机的连接方式 1. 两台计算机的互联 网…