前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nature单细胞亚群特征基因气泡图复现

Nature单细胞亚群特征基因气泡图复现

作者头像
生信菜鸟团
发布2024-04-18 19:53:46
940
发布2024-04-18 19:53:46
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

前一期:

Nature单细胞富集分析条形图复现

今天给大家复现上次提到的Nature文章中对单细胞不同亚群的特征基因进行展示的气泡图。

原图如下:

image-20240322182254814

此图主要涉及的点有:多亚群同时展示,配色雅致,气泡图中基因标签右对齐且不重叠

读取示例数据

此图展示的是在monkey spinal cords中三种不同的胶质细胞的特征基因,数据在文章的附表Supplementary Table 4。

下载链接:https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-023-06783-1/MediaObjects/41586_2023_6783_MOESM3_ESM.xlsx

此数据就是我们做单细胞分析时,FindAllMarkers() 函数的分析结果:

代码语言:javascript
复制
library(tidyverse)
library(ggplot2)

# skip=1跳过第一行描述行
data <- readxl::read_xlsx("41586_2023_6783_MOESM3_ESM.xlsx", sheet = "Supplementary Table 4", skip = 1)

head(data)

# A tibble: 6 × 7
     p_val avg_logFC pct.1 pct.2 p_val_adj cluster    gene              
     <dbl>     <dbl> <dbl> <dbl>     <dbl> <chr>      <chr>             
1 8.90e-67     0.524 0.578 0.412  1.70e-62 Microglia1 VAV3              
2 6.78e-27     0.610 0.132 0.053  1.30e-22 Microglia1 CX3CR1            
3 1.43e-19     0.538 0.101 0.042  2.74e-15 Microglia1 MRC1              
4 0            2.40  0.93  0.337  0        Microglia2 SPP1              
5 0            2.21  0.201 0.014  0        Microglia2 ENSMFAG00000000159
6 0            1.44  0.627 0.21   0        Microglia2 CD83 

增加横坐标

此图的横坐标为一个Rank指标,使用p_val_adj从小到大对每个CLuster的基因进行的一个排序序号;

纵坐标为log10(p_val_adj)

代码语言:javascript
复制
df <- data %>% 
  arrange(cluster, p_val_adj) 

# 横坐标
df$Rank <- c(1:table(data$cluster)["Microglia1"],
             1:table(data$cluster)["Microglia2"],
             1:table(data$cluster)["Microglia3"])
               

# 纵坐标,对于太大的padj值,做了一下处理
df$logPadj = -log10(df$p_val_adj)
df[df$logPadj>200,]$logPadj = 200

head(df)
# A tibble: 6 × 8
     p_val avg_logFC pct.1 pct.2 p_val_adj cluster    gene               logPadj
     <dbl>     <dbl> <dbl> <dbl>     <dbl> <chr>      <chr>                <dbl>
1 8.90e-67     0.524 0.578 0.412  1.70e-62 Microglia1 VAV3                  61.8
2 6.78e-27     0.610 0.132 0.053  1.30e-22 Microglia1 CX3CR1                21.9
3 1.43e-19     0.538 0.101 0.042  2.74e-15 Microglia1 MRC1                  14.6
4 0            2.40  0.93  0.337  0        Microglia2 SPP1                 200  
5 0            2.21  0.201 0.014  0        Microglia2 ENSMFAG00000000159   200  
6 0            1.44  0.627 0.21   0        Microglia2 CD83                 200  

得到标记基因

文章可能选取了p_val_adj值从小到大的top15中的一些基因,按照生物学意义挑选进行展示。

代码语言:javascript
复制
## 得到标记的top 15基因
data.label <- df %>% group_by(cluster) %>% top_n(n=15,wt = -Rank)
data.label <- data.label[!grepl(pattern = "ENS",data.label$gene), ]

绘图

接下来还需要稍微调整:

nudge_x:“标签”到“点”的水平距离,想要标签右对齐,需要为标签指定同样的横坐标,本文为100减去“点”的横坐标值

文字右对齐:hjust参数也很重要,“0”表示文字左对齐,“0.5”表示文字居中,“1”表示文字右对齐。

加上阴影:geom_stripped_cols,这里的阴影三个分面都是一样的区域,目前没有找到一个好办法可以不同分面加不同区域的阴影。美中不足啊~

代码语言:javascript
复制
p <- ggplot(df, aes(x=Rank, y=logPadj, color=cluster)) +
  geom_point(alpha=0.8, shape=16, size=2) +
  scale_x_continuous(breaks = c(0,50,100)) +
  ggrepel::geom_text_repel(inherit.aes = T, 
                           data = data.label, 
                           aes(x=Rank, y=logPadj, label=gene), 
                           size=3, 
                           segment.color = "grey50", #文本标签与点之间连线的颜色
                           box.padding = 0.1,
                           force = 1,        # 重叠文本标签之间的排斥力
                           nudge_x = 100-data.label$Rank,   # 标签在x轴上的起始位置,与x轴的数据单位相同
                           direction = "y",  # 排列方向
                           hjust= 1) +       # 添加标签右对齐
  facet_wrap(~cluster, nrow=1) + # 分面
  scale_color_manual(values=c('#b7b7b7', '#6bb9d2', '#d55640')) +
  theme(panel.grid = element_blank(), panel.background = element_blank(),
        axis.line = element_line(color='black'), 
        axis.ticks = element_line(color='black'), 
        legend.position = 'none', 
        axis.text = element_text(color='black'),
        plot.title = element_text(hjust=0.5)) +
  ggtitle(label = "Marker genes for microglia states")
 

## 不同分面添加阴影
p1 <- p + 
  geom_stripped_cols(width = 60, nudge_x = 80, color=NA, even ="grey50", alpha = .05, yfrom = 5, yto = 208) 

p1

ggsave(filename = "test.png", width = 5.5, height = 4, plot = p1, bg="white")

结果如下:

image-20240322213728156

简直是Perfect!!!

文献信息如下:

https://www.nature.com/articles/s41586-023-06783-1

CHIT1-positive microglia drive motor neuron ageing in the primate spinal cord

Nature. 2023 Dec;624(7992):611-620. doi: 10.1038/s41586-023-06783-1. Epub 2023 Oct 31

下期见~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 读取示例数据
  • 增加横坐标
  • 得到标记基因
  • 绘图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档