前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟着Oncogene学作图:R语言gggenomes画桑基图(共线性图)

跟着Oncogene学作图:R语言gggenomes画桑基图(共线性图)

作者头像
用户7010445
发布2023-01-06 20:25:03
1K0
发布2023-01-06 20:25:03
举报

论文

Single-cell RNA sequencing reveals distinct tumor microenvironmental patterns in lung adenocarcinoma

https://www.nature.com/articles/s41388-021-02054-3

这个是公众号读者的留言,问下图如何实现

image.png

论文中没有提供数据和代码,我们简单构造一个示例数据,然后代码自己写

这个图可以用桑基图的画法来做,之前的推文介绍了两个桑基图的做法

今天的推文介绍一下gggenomes这个R包,这个是用来做基因组共线性的图的,但是共线性和桑基图看起来效果是一样的,所以桑基图也可以用这个来做

github主页

https://github.com/thackl/gggenomes

安装代码

devtools::install_github("thackl/gggenomes")

安装过程会更新很多R包,会遇到一些报错,自己搜索报错提示信息应该能够解决

首先是一个简单的小例子

示例数据

image.png

读取数据作图

library(readxl)
library(gggenomes)

df<-read_excel("gggenomes_examples.xlsx",
               sheet="Sheet1")
df
gggenomes(genes = df)+
  geom_gene()

gggenomes(genes = df)+
  geom_gene(shape=0,aes(fill=group))

image.png

添加两个图之间的阴影

image.png

dflink<-read_excel("gggenomes_examples.xlsx",sheet = "Sheet2")
dflink
gggenomes(genes = df,links = dflink)+
  geom_link(offset = 0.05,aes(fill=group2))+
  geom_gene(shape=0,aes(fill=group),size=5)+
  theme(legend.position = "none")

image.png

接下来是模仿论文中的那个图

示例数据

image.png

读取数据并作图

dflink<-read_excel("gggenomes_examples.xlsx",sheet = "Sheet2")
dflink
gggenomes(genes = df,links = dflink)+
  geom_link(offset = 0.05,aes(fill=group2))+
  geom_gene(shape=0,aes(fill=group),size=5)+
  theme(legend.position = "none")

df3<-read_excel("gggenomes_examples.xlsx",
                sheet = "Sheet3")
df3


df3 %>% 
  filter(seq_id=="Normal") %>% 
  mutate(length=end-start+1) -> dflink01

df3 %>% 
  filter(seq_id=="Tumor") %>% 
  mutate(length=end-start+1) -> dflink02

bind_cols(dflink01,dflink02) -> dflinks
colnames(dflinks)<-c(c("seq_id","start","end","group",'length'),
                     paste0(c("seq_id","start","end","group",'length'),2))
dflinks
gggenomes(genes=df3,links = dflinks)+
  geom_bin_label(size=5)+
  geom_link(aes(fill=group),offset = 0.3)+
  geom_gene(aes(fill=group),shape=0,
            size=10)+
  theme(legend.position = "none",
        axis.line.x = element_blank(),
        axis.ticks.x=element_blank(),
        axis.text.x = element_blank())+
  xlim(-15,100)+
  scale_fill_manual(values =as.vector(tidyquant::palette_dark()))+
  annotate(geom = "segment",
           x=0,xend = 100,y = 0.5,yend=0.5)+
  geom_segment(data=data.frame(x=c(0,50,100),
                               xend=c(0,50,100),
                               y=c(0.5,0.5,0.5),
                               yend=c(0.4,0.4,0.4)),
               aes(x=x,xend=xend,y=y,yend=yend),
               inherit.aes = FALSE)+
  geom_text(data=data.frame(x=c(0,50,100),
                            y=c(0.4,0.4,0.4),
                            label=c("0.0",'0.5','1.0')),
            aes(x=x,y=y,label=label),vjust=1)

image.png

最后是制作封面图

gggenomes(genes=df3,links = dflinks)+
  geom_bin_label(size=5)+
  geom_link(aes(fill=group),offset = 0.3)+
  geom_gene(aes(fill=group),shape=0,
            size=10)+
  theme(legend.position = "none",
        axis.line.x = element_blank(),
        axis.ticks.x=element_blank(),
        axis.text.x = element_blank())+
  xlim(-15,100)+
  scale_fill_manual(values =as.vector(tidyquant::palette_dark()))+
  annotate(geom = "segment",
           x=0,xend = 100,y = 0.5,yend=0.5)+
  geom_segment(data=data.frame(x=c(0,50,100),
                               xend=c(0,50,100),
                               y=c(0.5,0.5,0.5),
                               yend=c(0.4,0.4,0.4)),
               aes(x=x,xend=xend,y=y,yend=yend),
               inherit.aes = FALSE)+
  geom_text(data=data.frame(x=c(0,50,100),
                            y=c(0.4,0.4,0.4),
                            label=c("0.0",'0.5','1.0')),
            aes(x=x,y=y,label=label),vjust=1) -> p1

gggenomes(genes=df3,links = dflinks)+
  geom_bin_label(size=5)+
  geom_link(aes(fill=group),offset = 0.3)+
  geom_gene(aes(fill=group),shape=0,
            size=10)+
  theme(legend.position = "none",
        axis.line.x = element_blank(),
        axis.ticks.x=element_blank(),
        axis.text.x = element_blank())+
  xlim(-15,100)+
  scale_fill_manual(values =as.vector(tidyquant::palette_light())) -> p2

library(patchwork)

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

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 论文
  • github主页
  • 首先是一个简单的小例子
  • 接下来是模仿论文中的那个图
  • 最后是制作封面图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档