前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FeaturePlot_scCustom作图

FeaturePlot_scCustom作图

原创
作者头像
JJJJack
修改2024-07-13 03:36:03
590
修改2024-07-13 03:36:03
举报
文章被收录于专栏:生物信息学_troubleshooting

分享一下昨天在分析单细胞数据的时候遇到的一个问题:

Seurat object里面有12个samples, 我想呈现A gene在12个samples里面的表达情况。FeaturePlot()是首选,然后12个samples挤在一起,根本看不到图,只呈现x-y轴和挤在一起的title。于是我用了ncol 参数,但是这个参数在featurePlot() 根本无效。这里需要make一下,出现这样的问题还是应该去Seurat官网找寻说明书。。。。在浪费一些时间之后,我发现了有团队推出了FeaturePlot_scCustom() function, 请移步 https://samuel-marsh.github.io/scCustomize/index.html for details。不知道是不是Seurat团队。

根据官网的介绍,代码如下:

代码语言:r
复制
# Show specific features in each sample.
p <- FeaturePlot_scCustom(seurat_object = object1, 
                          features = "TIGIT", 
                          split.by = "sample.origin",
                          # num_columns = 6,
                          combine = FALSE)  
p1 <- lapply(p,function(x){
  x + theme(
    plot.title = element_text(size = 6),     # Title size
    axis.title = element_text(size = 5),     # Axis title size
    axis.text = element_text(size = 4),      # Axis text size
    legend.title = element_text(size = 5),   # Legend title size
    legend.text = element_text(size = 4)     # Legend text size
  )
})

# Combine adjusted plots into one figure
combined_plot <- wrap_plots(p1,ncol = 6,guides = 'collect') &
  theme(legend.position = 'bottom', 
        legend.key.size = unit(0.5, 'cm'), 
        plot.title = element_text(size = 6),
        axis.title = element_text(size = 5),
        axis.text = element_text(size = 5),
        legend.title = element_text(size = 4),
        legend.text = element_text(size = 3))

print(combined_plot)

上述的代码可以成功的解决我的需求,即12个samples 分成 2 rows * 6 columns来呈现 gene的表达。但是最大的问题就是缺了最后一个sample...为此,又花了近3h的时间来troubleshooting。

p is a patchwork object, we need to check the length of p (returns 12) and whether each of element is accessible。很显然,12个sample中的最后一个sample没法accessible。一行代码就可以解决这个问题:

代码语言:r
复制
plots <- lapply(1:length(p), function(i) p[[i]])

所以最终的代码如下:

代码语言:r
复制
# Show specific features in each sample.
p <- FeaturePlot_scCustom(seurat_object = object1, 
                          features = "TIGIT", 
                          split.by = "sample.origin",
                          # num_columns = 6,
                          combine = FALSE)  # Set combine to FALSE to keep individual plots
plots <- lapply(1:length(p), function(i) p[[i]])
length(plots)  # Should be 12
p1 <- lapply(plots,function(x){
  x + theme(
    plot.title = element_text(size = 6),     # Title size
    axis.title = element_text(size = 5),     # Axis title size
    axis.text = element_text(size = 4),      # Axis text size
    legend.title = element_text(size = 5),   # Legend title size
    legend.text = element_text(size = 4)     # Legend text size
  )
})

length(p1)
# Combine adjusted plots into one figure
combined_plot <- wrap_plots(p1,ncol = 6,guides = 'collect') &
  theme(legend.position = 'bottom', 
        legend.key.size = unit(0.5, 'cm'), 
        plot.title = element_text(size = 6),
        axis.title = element_text(size = 5),
        axis.text = element_text(size = 5),
        legend.title = element_text(size = 4),
        legend.text = element_text(size = 3))

print(combined_plot)

总结:

需要了解每一个对象的结构和内容,才能及时的发现每个function/command做了哪些事情。

多使用 str(), class(), length()。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档