前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用R语言的circlize包复现一下Microbiome期刊中的圈图

用R语言的circlize包复现一下Microbiome期刊中的圈图

作者头像
用户7010445
发布2024-06-18 17:51:44
890
发布2024-06-18 17:51:44
举报

论文

Heritability and recursive influence of host genetics on the rumen microbiota drive body weight variance in male Hu sheep lambs

复现论文中的fig2

没有找到论文中提供的数据,我们自己来构造数据,如何利用otu表格把数据整理成作图需要用的格式,这个今天的推文不做介绍,今天的推文只介绍已经有了作图需要用到的数据后如何作图。

(others phylum 这个英文表述是不是有问题?有没有大佬可以解释一下?)

首先是最外圈的数据

最外圈文字的数据

第二圈数据

第三圈的数据

与第二圈的数据格式一致

第四圈的数据

第五圈的数据

利用第三圈的数据生成

最里层连线的数据

完整的代码

代码语言:javascript
复制
library(circlize)
library(readxl)
library(tidyverse)
library("RColorBrewer")


dat01<-read_excel("2024.data/20240610/data01.xlsx")
dat01 %>% 
  mutate(phylum=factor(phylum,levels = phylum)) -> dat01

dat02<-read_excel("2024.data/20240610/data02.xlsx")
dat02

dat03<-read_excel("2024.data/20240610/data03.xlsx")
dat03

dat04<-read_excel("2024.data/20240610/data04.xlsx")
dat04

dat05<-read_excel("2024.data/20240610/data05.xlsx")
dat05

dat06.mat<-dat03 %>% pull(y) %>% as.matrix(ncol=1)
dat06.mat

data07<-read_excel("2024.data/20240610/data07.xlsx")
data07

brk<-seq(0,30,2)
brk
circos.par(start.degree =86,clock.wise = T)
## 热图的圈参考链接 https://jokergoo.github.io/circlize_book/book/circos-heatmap.html
circos.heatmap.initialize(dat06.mat, 
                          split = factor(dat06$phylum,
                                         levels = dat06$phylum %>% unique()))
circos.initialize(factors = dat01$phylum, 
                  xlim = matrix(c(dat01$start,dat01$numberofgenera),ncol=2))

## 第一圈文字
circos.genomicLabels(dat02,side = "outside",labels.column = 4)

## 第一圈灰色背景
circos.trackPlotRegion(dat01$phylum, 
                       ylim = c(0, 10),
                       track.height = 0.05,
                       bg.border = NA, 
                       #ylim=CELL_META$ylim,
                       panel.fun = function(x, y) {
                         circos.text(mean(CELL_META$xlim),mean(CELL_META$ylim), 
                                     get.cell.meta.data("sector.index"))
                       },
                       bg.col='#EEEEEE6E')
## 第一圈线段
for (chromosome in dat02$phylum){
  circos.segments(sector.index = chromosome,
                  x0=dat02[dat02$phylum==chromosome,]$start,
                  x1=dat02[dat02$phylum==chromosome,]$end,
                  y0=-2,y1=12,col="red")
}

## 第一圈刻度
for (chromosome in dat01$phylum){
  circos.axis(sector.index = chromosome,
              h = 12,
              major.at = brk,
              minor.ticks = 0,
              labels = FALSE)
}

## 第二圈
circos.trackPlotRegion(dat01$phylum, 
                       ylim = c(0, 100),
                       track.height = 0.1,
                       bg.col = '#EEEEEE6E', 
                       bg.border = "black")

for (chromosome in dat03$phylum){
  circos.points(sector.index = chromosome,
                x=dat03[dat03$phylum==chromosome,]$x,
                y=dat03[dat03$phylum==chromosome,]$y,
                col="red",
                pch=19)
}

## 第三圈

circos.trackPlotRegion(dat01$phylum, 
                       ylim = c(0, 100),
                       track.height = 0.1,
                       bg.col = '#EEEEEE6E', 
                       bg.border = NA)

for (chromosome in dat04$phylum){
  circos.lines(sector.index = chromosome,
               x=dat04[dat04$phylum==chromosome,]$x,
               y=dat04[dat04$phylum==chromosome,]$y,
               col="#559a90",
               area=TRUE,
               border=NA,
               type="I")
  
}

## 第四圈
circos.trackPlotRegion(dat01$phylum, 
                       ylim = c(0, 100),
                       track.height = 0.05,
                       bg.col = '#EEEEEE6E', 
                       bg.border = "black")

for (chromosome in dat05$phylum){
  circos.points(sector.index = chromosome,
                x=dat05[dat05$phylum==chromosome,]$x,
                y=dat05[dat05$phylum==chromosome,]$y,
                col="red",
                pch=dat05[dat05$phylum==chromosome,]$shape)
}

## 第五圈

circos.heatmap(dat06.mat,
               col = colorRamp2(breaks = c(0, 50, 100), 
                                col = brewer.pal(n = 3, name = "RdBu")),
               track.height=0.1)


## 最内圈的连线

for (i in 1:nrow(data07)){
  circos.link(sector.index1=data07$phylum01[i],
              point1=data07$x01[i],
              sector.index2=data07$phylum02[i], 
              point2=data07$x02[i])
}


circos.clear()

图例的部分可能需要借助AI来拼图了

今天推文的示例数据和代码可以给推文打赏20元获取

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 论文
  • 首先是最外圈的数据
  • 第二圈数据
  • 第三圈的数据
  • 第四圈的数据
  • 第五圈的数据
  • 最里层连线的数据
  • 完整的代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档