评论

如何绘制桑基气泡组合图?富集结果五维度全新展示!

一般的富集气泡图最多可以展示四个维度的信息,如常见的同时展示pathway(y轴)、count(气泡大小)、p value(映射颜色)、gene ratio(x轴)。

桑基图常用于展示关联数据间的流动,在气泡图左侧通过添加桑基图,可将每个pathway中count对应的geneID直观展示,从而实现五个维度富集信息的展现,如下图两个文献中的案例:

( Nat Commun ,2022)

( Briefings in Bioinformatics ,2021)

基本绘图逻辑为先分别绘制富集气泡图和桑基图,然后进行拼接。话不多说,下面就来一起学习如何绘制吧!

#相关R包载入:

library(tidyverse)

library(ggsankey)

library(ggplot2)

library(cols4all)

library(cowplot)

#本地数据载入:

##富集气泡图数据:

kegg<- read.csv('enrichdt.csv',header = T)

head(kegg)

##桑基图数据:

sankey<- read.csv('sankeydt.csv',header = T)

head(sankey)

1. 富集气泡图绘制

#如果我们按照以往常规的绘制方法:

#指定绘图顺序(转换为因子):

kegg$pathNames <- factor(kegg$pathNames,levels = rev(kegg$pathNames))

#基础富集气泡图:

p1<- ggplot +

geom_point(data = kegg,

aes(x = -log10(Pvalue),

y= pathNames,

size= count,

color= Hit.Ratio)) + # 气泡大小及颜色设置

theme_bw+

labs(x = "-log10(Pvalue)",

y= "")

p1

这样绘制出来的图表y轴间距,也就是我们标签间的距离是相同的,但我们的组合图表中需要间距不等(根据count的比例来决定间距),这样才能和桑基图对应拼接。

这里可以参考的一种处理方式为:将原本的y轴标签(分类型变量)更改为数值型标签,从而实现不等距的效果。

#数据处理:

kegg2<- kegg[12:1,] #先调转数据框方向

kegg2<- kegg2 %>%

mutate(ymax = cumsum(count)) %>% #ymax为Width列的累加和

mutate(ymin = ymax -count) %>%

mutate(label = (ymin + ymax)/2) #取xmin和xmax的中心位置作为标签位置

head(kegg2)

p2<- ggplot +

geom_point(data = kegg2,

aes(x = -log10(Pvalue),

y= label, #替换y轴列为数值

size= count,

color= Hit.Ratio)) +

theme_bw+

labs(x = "-log10(Pvalue)",

y= "")

p2

#自定义主题与配色修改:

mytheme<- theme(axis.title = element_text(size = 13),

axis.text = element_text(size = 11),

axis.text.y = element_blank,

axis.ticks.y = element_blank,

legend.title = element_text(size = 13),

legend.text = element_text(size = 11))

p3<- ggplot +

geom_point(data = kegg2,

aes(x = -log10(Pvalue),

y= label,

size= count,

color= Hit.Ratio)) +

scale_size_continuous(range=c(2,8)) + #调整气泡大小范围(默认尺寸部分过小)

scale_y_continuous(expand = c(0,0.1),limits = c(0,52)) +

scale_x_continuous(limits = c(0.57,2.5)) +

scale_colour_distiller(palette = "Reds", direction = 1) + #更改配色

labs(x = "-log10(Pvalue)",

y= "") +

theme_bw+

mytheme

p3

现在用于拼接的富集气泡图就画好啦!下面我们使用ggsankey包绘制桑基图,该R包的详细使用方法可戳往期:《如何绘制高分文献的同款桑基图?炫酷+轻松=完胜!》

2. 桑基图绘制

#将数据转换为绘图所需格式:

df<- sankey %>%

make_long(metamolites, pathNames)

head(df)

#指定绘图顺序(转换为因子):

df$node <- factor(df$node,levels = c(sankey$pathNames %>% unique%>% rev,

sankey$metamolites %>% unique %>% rev))

#自定义配色:

c4a_gui

mycol<- c4a('rainbow_wh_rd',53)

#绘图:

p4<- ggplot(df, aes(x = x,

next_x= next_x,

node= node,

next_node= next_node,

fill= node,

label= node)) +

geom_sankey(flow.alpha = 0.5,

flow.fill = 'grey',

flow.color = 'grey80', #条带描边色

node.fill = mycol, #节点填充色

smooth= 8,

width= 0.08) +

geom_sankey_text(size = 3.2,

color= "black")+

theme_void+

theme(legend.position = 'none')

p4

3. 拼图

#通过调整页边距在桑基图右侧先留出空白:

p5<- p4 + theme(plot.margin = unit(c(0,5,0,0),units= "cm"))

p5

#拼图(在p5的空白位置中插入p3):

ggdraw+ draw_plot(p5) + draw_plot(p3, scale = 0.5, x = 0.62, y=-0.21, width=0.48, height=1.37)

具体的位置需要根据实际反复调整,直至对齐。到这里我们基本完成了桑基气泡组合图的绘制,如果想要精益求精,可以最后在AI中调整一下标签的位置。

4. AI调整

在AI中打开我们上一步保存的图表(矢量格式),使用直接选择工具鼠标长按框选住桑基图右侧列的全部标签;

在右侧属性控制栏中选择对齐—水平右对齐,如果在右侧找不到,可以通过菜单栏窗口—对齐(shift+F7)调出该属性面板。

切换到选择工具,水平拖动标签到节点的左方即可。

桑基图左侧列标签的调整方法相同,我们就不再赘述啦。最后使用直接选择工具选中右侧的气泡图全部图形元素(包括文字和图例),再切换回选择工具,向左水平移动填满空白部分。

最终效果如下:

好啦,今天的分享就到这里!

参考资料

https://github.com/davidsjoberg/ggsankey

参考文献

Yu, W., Wang, Z., Yu, X. et al. Kir2.1-mediated membrane potential promotes nutrient acquisition and inflammation through regulation of nutrient transporters. Nat Commun 13, 3544 (2022).

Mall R , Saad M , Roelands J , et al. Network-based identification of key master regulators associated with an immune-silent cancer phenotype[J]. Briefings in bioinformatics:bbab168.

*未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。

基迪奥生物|专业定制测序服务

联系方式:020-39341079;service@genedenovo.com返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()