R包 | 第2期. 你真的了解Dotplot嘛

文摘   教育   2024-09-14 19:02   北京  


本系列推送旨在带领生信零基础的科研人一起学习常见R包相关使用方法以及变量设置。

上一期我们介绍了R包的重要性、基本结构以及我们未来的分享框架,本期就进入实战分享啦,我们使用的数据仍然是我们单细胞系列人血管细胞的数据(单细胞测序 | 第12期. 单细胞分析数据下载、导入和合并)。首先我们要分享的R包是Seurat-Dotplot函数


往期回顾:

MASCU

第1期. 新系列来啦~ R包 | 第1期. 绪论


期我们针对Dotplot包本期要分享三个内容,Dotplot包的基本图解,相关参数调整和实战。


一、Dotplot功能


Function of Dotplot


Dotplot函数主要是在单细胞分析之中可视化不同cluster的基因表达气泡图的。点的大小代表表达特定基因的比例(Percent Expressed),点的颜色变化代表基因的表达水平(Average Expresstion),如下图所示。




二、开发者信息


Developer information


Dotplot函数隶属于Seurat包,是由Rahul Satija, Satija Lab and Collaborators开发的。Rahul Satija是基因组学家和计算生物学家,拥有杜克大学生物学和音乐学的学士学位,并在牛津大学获得统计学的博士学位。2015年时,Satija 和他在剑桥麻省理工Broad研究所的同事(还包括他的博士后导师 Aviv Regev)发布了第一版的 Seurat 软件工具包,2023年3月发布了Seurat v5版本,为单细胞数据分析提供了强有力的工具。


三、Dotplot实战


Dotplot practice


可调控参数展示:

install.packages('Seurat')
library(Seurat)
#相关可调整参数展示
DotPlot(
  object, # Seurat 对象
  features, #可以是向量或者成组的基因list
  assay = NULL, #默认是active assay,一般不用管
  cols = c("lightgrey""blue"), #颜色范围默认是灰色和蓝色
  col.min = -2.5, #颜色比例相关设置,默认为-2.5
  col.max = 2.5,  #默认为2.5
  dot.scale = 6, #大小相关设置,默认是6
  idents = NULL, #可以只展示某些cluster,默认是all
  group.by = NULL, #制定分组变量,例如“Group”、“celltype”
  split.by = NULL,  #根据一个元数据变量来拆分点图,例如 "condition" 或 "treatment",可以将同一细胞类型在不同条件下的表达情况分开展示。
  cluster.idents = FALSE, #是否根据细胞的标识符(idents)进行聚类。默认值为 FALSE
  scale = TRUE, #就是scale data
  scale.by = "radius"# "radius" 使点的面积与基因表达的百分比成正比,而 "size" 使点的半径与表达百分比成正比
  scale.min = NA,  #可以对于缩放后的值进行限制
  scale.max = NA 
)



接下来我们通过实际代码演示包参数调整后的不同结果。

1. 基础图形

Dotplot1 <- DotPlot(Hu_AO_db_QC2,features ="ACTA2")



Identity代表的是分组,Features代表的是基因,这个样式有点丑,我们调整一下颜色。


2. 颜色
#有下方两种方法,效果是一样的
Dotplot1 <- DotPlot(Hu_AO_db_QC2,features ="ACTA2",cols =c("#f0dd93""#bd4335" ))
Dotplot1 <- DotPlot(Hu_AO_db_QC2,features ="ACTA2")+
   scale_colour_gradientn(colors = c("#f0dd93""#bd4335")


设置颜色


3. col.mincol.max

col.mincol.max的作用是将标准化后的表达量中低于col.min的替换为col.min,高于col.max的替换为col.max默认是(-2.52.5如果设置为(0, 2.5),我们可以看Average Expression发现低于0的负值全部被替换为了0

Dotplot1 <- DotPlot(Hu_AO_db_QC2,features ="ACTA2",cols =c("#f0dd93""#bd4335" ),
               col.min = 0,
               col.max=2.5)

设置col.min和max


4. scale

默认的scale =T,也就是会对数据进行scale(正负均有),如果我们设置为False,那么可以看到数据将会展示原来的数值,表达量也就会大于0了。
Dotplot1 <- DotPlot(Hu_AO_db_QC2,features ="ACTA2",cols =c("#f0dd93""#bd4335" ),
           scale=F)

scale=F


5. dot.scale

dot.scale是调节气泡之间的差异程度,默认是dot.scale=6,如果我们调整到1,可以看到点的趋势变化就不是特别明显了,如果调整到0,那么基本就没有变化了。

Dotplot1 <- DotPlot(Hu_AO_db_QC2,features ="ACTA2",cols =c("#f0dd93""#bd4335" ),
                    dot.scale = 1)


dot.scale=1


6. scale.by

scale.by默认是radius,结果如原始图形所示,还可选的一种是size,如下图所示,其实差别并不是太大。

Dotplot1 <- DotPlot(Hu_AO_db_QC2,features ="ACTA2",cols =c("#f0dd93""#bd4335" ),
                    scale.by = "size")

scale.by调整为“size”


但有时我们会遇到另一个问题:如果不同组别的Percent Expressed相近的话,由于dot.sclae默认为6,使得相近的Percent Expressed却展现区别较大的点,导致点的大小或半径并不能“真实”反映该基因表达百分比,这个时候就是要设置我们缩放的阈值了,直接调整回0-100则可以真实反映我们的大小,如下一点所示。


7. scale.min/max
Dotplot1 <- DotPlot(Hu_AO_db_QC2,features ="ACTA2",cols =c("#f0dd93""#bd4335" ),
                    scale.min = 0,
                    scale.max = 100)


scale.min=0,scale.max=100


8. group.by/split.by

于我们在画Dotplot之前是设置了active.identity,即
Idents(Hu_AO_db_QC2) <- "Group"
以默认group.by=“Group”,但其实还可以调整为"orig.ident"等等。

设置group.by = "orig.ident"


Split by则是可以在group.by的基础上再把Identity分为更细的群,使用不多,大家可以尝试一下。


9. 额外福利

最后给大家一个额外目的的代码,如果想要展示某个基因在不同分组(下图纵坐标ABC)以及细胞亚群(下图横坐标)的气泡图,需要提取每一个细胞亚群的Seurat对象画该基因的气泡图,最后再拼接起来。如下所示:



具体代码如下:
list_V <- c("Anxa1"

Macrophages <- subset(Seurat_object,Major_celltype=="Macrophages")
Idents(Macrophages ) <- "Group"

p1 <- DotPlot(Macrophages, features = list_V,assay = "RNA")+  labs(x = "Macrophages")+
  theme(axis.text.x = element_text(angle = 45,hjust = 1,vjust=1),legend.position="none",
        panel.background=element_blank(),
        panel.spacing = unit(1,"line"),
        panel.border=element_rect(color="black",fill=NA,size=1),
        axis.title.y=element_blank())+
        #axis.text.y = element_blank()) +  # 隐藏 Y 轴刻度标签
  scale_colour_gradientn(colors = c("#7795bc","white","#f0dd93","#bd4335"))

FBs <- subset(Seurat_object,Major_celltype=="FBs")
Idents(FBs ) <- "Group"

p2 <- DotPlot(FBs, features = list_V,assay = "RNA")+  labs(x = "FBs")+
  theme(axis.text.x = element_text(angle = 45,hjust = 1,vjust=1),legend.position="none",
        panel.background=element_blank(),
        panel.spacing = unit(1,"line"),
        panel.border=element_rect(color="black",fill=NA,size=1),
        axis.title.y=element_blank(),
         axis.text.y = element_blank()) +  # 隐藏 Y 轴刻度标签
  scale_colour_gradientn(colors = c("#7795bc","white","#f0dd93","#bd4335"))

# … 如此重复

  p11 <- DotPlot(CCs, features = list_V, assay = "RNA") + labs(x = "CCs") +
    theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1), #legend.position = "none",
          panel.background = element_blank(),
          panel.spacing = unit(1, "line"),
          panel.border = element_rect(color = "black", fill = NA, size = 1),
          axis.title.y = element_blank(),
          axis.text.y = element_blank()) +
scale_colour_gradientn(colors = c("#7795bc""white""#f0dd93""#bd4335"))

pdf(paste0('path/DotPlot_', gene, '.pdf'), width = 22, height = 5)
  print(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9 + p10 + p11 + plot_layout(nrow = 1))
  dev.off()


那么这就是本期的全部内容啦,大家对于dotplot还有问题吗?欢迎大家持续关注,大家也可用留言告诉我们想要学习的R包,我们一同学习进步!大家对于推送内容有任何问题或建议可以在公众号菜单栏“更多--读者的话” 栏目中提出,我们会尽快回复!


参考资料:

[1] https://satijalab.org/seurat/reference/dotplot

///期待已久 R语言与组学交流群!


Chat Group

#2024#

请添加下方微信,备注:“R语言与组学_互助交流群” 将拉入群中。




写在最后

“观科研”(点击进一步了解我们吧)是由一群北京协和医学院(清华大学医学部)的博士开创的公众号,初心是让医学科研有迹可循,帮助一线的医学科研人员更快地成长,希望大家支持与关注!

如果大家对分享医学科研知识感兴趣,特别欢迎加入我们,期待与您的相遇相识相知,也非常欢迎大家自主投稿,如果您有需要分享的内容或对我们有任何建议,可通过后台留言、公众号菜单栏“更多—读者的话”栏目进一步了解)或发送邮件至mascu_forever@163.com与我们交流并留下个人联系方式,我们会及时与您联系。

如果您觉得我们长期的干货推送对您的科研工作有所帮助,可以在合适的机会致谢(包括但不限于SCI论文、毕业论文等),格式如下:
The authors thank the support of Skill Learning from Kaixin Doctor and MASCU (Medical Association with Science, Creativity, and Unity), Inc, Shenzhen, China (mascu_forever@163.com).

【大家的支持,是我们持续更新的动力!】


Pay attention!
微信公众号的推送规则发生改变(不再按照时间顺序来显示),如果没有将“观科研”设置为星标,你就可能错失里面的精彩推送。


点击“在看”,可参与讨论哦!


图文:直观
审核:壮观
编辑:直观
责编:直观

观科研
让医学科研有迹可循
 最新文章