前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >跟着Molecular Plant学作图:R语言circlize包画圈图展示基因组的一些特征

跟着Molecular Plant学作图:R语言circlize包画圈图展示基因组的一些特征

作者头像
用户7010445
发布于 2023-01-06 12:15:46
发布于 2023-01-06 12:15:46
2.1K02
代码可运行
举报
运行总次数:2
代码可运行

论文

A telomere-to-telomere gap-free reference genome of watermelon and its mutation library provide important resources for gene discovery and breeding

https://www.cell.com/molecular-plant/fulltext/S1674-2052(22)00192-7?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS1674205222001927%3Fshowall%3Dtrue

今天的推文我们重复一下论文中的Figure1a

image.png

论文中没有提供数据和代码,数据自己算,代码自己写

之前分享过的关于圈图的推文

跟着Nature Communications学画图:R语言circlize包画弦图展示基因密度

根据vcf文件计算SNP密度并用circlize可视化结果

R包circlize绘制基因组重测序变异圈图示例

计算gc含量和基因密度

利用基因组fasta文件统计染色体长度和GC含量,自己写python脚本(当然有很多工具可以统计)利用gtf文件统计基因密度

读取fasta用到了biopython

代码语言:javascript
代码运行次数:0
复制
class WaterMelon:
    def __init__(self,gtf,fasta):
        self.gtf = gtf
        self.fasta = fasta
        
    def chromoLen(self):
        chrLen = {}
        for rec in SeqIO.parse(self.fasta,'fasta'):
            chrLen[rec.id] = len(rec.seq)
            
        return chrLen
    
    def gcContent(self,gc_window):
        self.gc_window = gc_window
        
        gc_content = {'chr_id':[],
                     'bin_start':[],
                     'gc':[]}
        chr_len = self.chromoLen()
        
        #print(chr_len)
        for rec in SeqIO.parse(self.fasta,'fasta'):
            for i in range(0,chr_len[rec.id],self.gc_window):
                #print(rec.id)
                gc_content['chr_id'].append(rec.id)
                gc_content['bin_start'].append(i)
                gc_content['gc'].append(round(GC(rec.seq[i:i+self.gc_window]),2))
        return pd.DataFrame(gc_content)
    
    def geneDensity(self,gene_window):
        self.gene_window = gene_window
        final_df = []
        df = pd.read_table(self.gtf,header=None,comment="#",sep="\t",
                           usecols=[0,2,3,4],
                           names="Chromosome Feature Start End".split())
        #df.columns = "Chromosome Source Feature Start End Score Strand Frame Attribute".split()
        df = df[df.Feature=="gene"]
        chrLen = self.chromoLen()
        for chr_id in chrLen.keys():
            print(chr_id)
            df1 = df[df.Chromosome==chr_id]
            gene_start = [int(a) for a in df1.Start]
            gene_start.insert(0,0)
            gene_start.append(round(chrLen[chr_id]/self.gene_window)*self.gene_window+self.gene_window)
            #print(gene_start)
            bin_start = [int(a.left) for a in pd.cut(gene_start,bins=round(chrLen[chr_id]/self.gene_window)+1).value_counts().index]
            bin_start[0] = 0
            gene_count = list(pd.cut(gene_start,bins=round(chrLen[chr_id]/self.gene_window)+1).value_counts().values)
            #print(len(bin_start))
            #print(len(gene_count))
            #print("OK")
            final_df.append(pd.DataFrame({'chr_id':chr_id,'bin_start':bin_start,'gene_count':gene_count}))
            
        return pd.concat(final_df)
        

这里是用python算的

TE的密度暂时不知道怎么算,snp和indel的密度可以使用vcftools软件,但是没有找到输入文件

首先是读取数据

代码语言:javascript
代码运行次数:0
复制
df<-read.csv("D:/Jupyter/bioinformatics_python/MPwatermelon.csv")
gc<-read.csv("D:/Jupyter/bioinformatics_python/gc.csv")
genedensity<-read.csv("D:/Jupyter/bioinformatics_python/genedensity.csv")

max(df$chr_len)
head(gc)
range(gc$gc)
head(genedensity)
range(genedensity$gene_count)

genedensity %>% 
  mutate(group=case_when(
    gene_count < 35 ~ "#1efc05",
    gene_count > 50 ~ "red",
    TRUE ~ "black"
  )) -> genedensity

染色体长度数据

image.png

gc含量数据

image.png

基因密度数据

image.png

作图代码

代码语言:javascript
代码运行次数:0
复制
library(circlize)
brk <- seq(0,40,by=2)*10^6
brk.label<-c()
for (i in brk){
  ifelse(i%%10^7==0,brk.label<-append(brk.label,
                                      paste0(i/10^7,"0M")),
         brk.label<-append(brk.label,""))
}
brk.label[1]<-"0M"
brk.label

#circos.par(points.overflow.warning = FALSE)
pdf(file = "mp.pdf",
    width = 15,height = 15)
circos.par(start.degree =86,clock.wise = T)
circos.initialize(factors = df$chr_id, 
                  xlim = matrix(c(rep(0,11),df$chr_len),ncol=2))
circos.trackPlotRegion(df$chr_id, 
                       ylim = c(0, 10),
                       track.height = 0.1,
                       bg.border = NA, 
                       #ylim=CELL_META$ylim,
                       panel.fun = function(x, y) {
                         circos.text(mean(CELL_META$xlim), 12, 
                                     get.cell.meta.data("sector.index"))
                       })

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


for (chromosome in df$chr_id){
  circos.axis(sector.index = chromosome,
              h = 110,
              major.at = brk,
              minor.ticks = 0,
              labels = brk.label,
              labels.facing="clockwise",
              labels.cex = 0.6)
}

circos.trackLines(gc$chr_id,gc$bin_start,gc$gc,
                  area = TRUE,
                  col = "red",
                  border="transparent")

circos.trackPlotRegion(df$chr_id, 
                       ylim = c(0, 10),
                       track.height = 0.1,
                       bg.col = '#EEEEEE6E', 
                       bg.border = NA)

for (chromosome in df$chr_id){
  circos.segments(sector.index = chromosome,
                  x0=genedensity[genedensity$chr_id==chromosome,]$bin_start,
                  x1=genedensity[genedensity$chr_id==chromosome,]$bin_start,
                  y0=0,y1=10,col=genedensity[genedensity$chr_id==chromosome,]$group)
}


circos.trackPlotRegion(df$chr_id, 
                       ylim = c(0, 10),
                       track.height = 0.1,
                       bg.col = '#EEEEEE6E', 
                       bg.border = NA)

for (chromosome in df$chr_id){
  circos.segments(sector.index = chromosome,
                  x0=genedensity[genedensity$chr_id==chromosome,]$bin_start,
                  x1=genedensity[genedensity$chr_id==chromosome,]$bin_start,
                  y0=0,y1=10,col=genedensity[genedensity$chr_id==chromosome,]$group)
}

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

for (chromosome in df$chr_id){
  circos.barplot(sector.index = chromosome,
                 value = genedensity[genedensity$chr_id==chromosome,]$gene_count,
                 pos = genedensity[genedensity$chr_id==chromosome,]$bin_start,
                 col = "red",
                 bar_width = 500000,
                 border="transparent")
}

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

for (chromosome in df$chr_id){
  circos.barplot(sector.index = chromosome,
                 value = genedensity[genedensity$chr_id==chromosome,]$gene_count,
                 pos = genedensity[genedensity$chr_id==chromosome,]$bin_start,
                 col = "blue",
                 bar_width = 500000,
                 border="transparent")
}


circos.clear()
dev.off()

最终结果

image.png

如何添加图例我暂时还没有搞明白,再好好学下这个包的用法,学会了再来分享

从外到内

  • 第一圈是折线图,
  • 第二、三圈是线段
  • 第四五圈是柱形图

代码细节用文字描述可能会比较繁琐,抽时间录视频介绍吧

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
跟着Nature Communications学画图:R语言circlize包画弦图展示基因密度
https://github.com/CornilleAmandine/-apricot_evolutionary_history_2021
用户7010445
2021/07/30
1.4K0
Circos图神器--circlize包
circlize包是由德国癌症中心的华人博士Zuguang Gu开发,这个R包包含两个文件,一个是介绍绘制简单圈图的方法,另一个专门介绍基因组数据绘制圈图。
作图丫
2022/03/29
5.1K0
Circos图神器--circlize包
除了画弦图,circlize竟然能这样用?
这张图来自于一篇对胎盘母胎界面的细胞互作研究[1],这篇文献筛选出了所有细胞表达的配体和受体,利用现有的数据库找到配体-受体对,用箭头将这些细胞表达对应的配体-受体对连接起来,从而推断出不同类型细胞间的互作关系。
百味科研芝士
2019/05/23
3.8K1
R语言circlize包实例3
在 https://www.promptcloud.com/blog/data-visualization-text-mining-taylor-swift-song-lyrics/ 这篇文章里找到了答案
用户7010445
2020/03/03
6860
R语言circlize包画一幅好看的弦图~完整示例数据和代码
这份教程的链接地址是 https://www.royfrancis.com/beautiful-circos-plots-in-r/
用户7010445
2021/07/12
2.6K0
R语言circlize包画一幅好看的弦图~完整示例数据和代码
使用R语言包circlize可视化展示blast双序列比对结果
植物线粒体基因组类的文章通常会分析细胞器基因组间基因转移情况,基本的分析方法就是blast比对。可视化展示可以选择用这个圈图来做
用户7010445
2020/09/03
1.5K0
使用R语言包circlize可视化展示blast双序列比对结果
R语言circlize包实例2:环形的柱形图
https://jokergoo.github.io/circlize_book/book/high-level-plots.html
用户7010445
2020/03/03
1.7K0
circlize优雅绘制环状热图
R语言数据分析指南
2023/11/20
3941
circlize优雅绘制环状热图
根据vcf文件计算SNP密度并用circlize可视化结果
参考 收集vcftools所有用法 命令 vcftools --vcf snp.bialles.vcf --SNPdensity 100000 --out StatResults/SNPdensity 100000 是指定窗口长度 --out 是输出文件的前缀 使用R语言中的circlize包画图 参考 用circlize包绘制circos plot 代码 df<-read.table("SNPdensity.snpden",sep="\t",header=T) head(df) df<-df[,c(1,
用户7010445
2020/03/03
4.3K1
R语言circlize包实例1
https://stats.biopapyrus.jp/r/graph/circos-plot.html
用户7010445
2020/03/03
9050
一起画个圈圈看差异基因
最近朋友看论文,看到了个展示差异基因的好看图,说想给自己的差异基因也来画一个,我研究了下,实现挺简单,现成的R包circlize 就可以做,那我们就一起来画一个圈圈吧!
生信菜鸟团
2022/04/08
1.1K0
一起画个圈圈看差异基因
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
heatmap()的输入应该是一个矩阵(或者一个将被转换为单列矩阵的向量)。如果矩阵被分割成组,必须用split参数指定一个分类变量。注意spilt的值应该是一个字符向量或一个因子。如果它是一个数字向量,它将被转换为字符。
拓端
2021/09/29
5.1K0
代码海洋-你想模仿的这里都有啊
docker我们讲解很多次了,具体大家可以浏览我在在生信技能树上面写过部分docker教程, 目录如下:
生信技能树
2019/12/23
1.7K0
代码海洋-你想模仿的这里都有啊
edgebundleR一行代码优雅的绘制网络图
cutoff: 边捆绑的阈值参数,控制捆绑边的密度。较低的值会产生更多的捆绑边,而较高的值会产生较少的捆绑边。这里设置为 0.5。
R语言数据分析指南
2023/05/28
4800
edgebundleR一行代码优雅的绘制网络图
R语言绘制Circos图
Circos图加拿大的生物信息科学家 Martin Krzywinski 开发的,最初主要用于基因组序列相关数据的可视化。现在越来越多的领域把Circos图引入其中。今天我们介绍在R语言中如何绘制Circos图。
一粒沙
2019/07/31
5.8K0
R语言Circlize包绘制和弦图
和弦图可用于表示数据间的关系和流量。外围不同颜色圆环表示数据节点,弧长表示数据量大小。内部不同颜色连接带,表示数据关系流向、数量级和位置信息,连接带颜色还可以表示第三维度信息。首尾宽度一致的连接带表示单向流量(从与连接带颜色相同的外围圆环流出),而首尾宽度不同的连接带表示双向流量。外层加入比例尺,还可以一目了然的发现数据流量所占比例。
DoubleHelix
2019/08/07
12.7K0
有必要把不同染色体差异基因使用圈圈图展示吗
这两天我们讨论了差异分析:TCGA等大样本量差异分析该使用DEseq2还是edgeR呢? 以及:使用DEseq2做转录组测序差异分析的时候顺便去除批次效应,就免不了提一下可视化了:
生信技能树
2022/07/26
7190
有必要把不同染色体差异基因使用圈圈图展示吗
【画图】如何批量展现基因表达相关性?
现在已经有明确的实验证明,跟SARS病毒一样,新冠状病毒2019-nCoV与宿主细胞的ACE2受体结合[1]。上次教程已经给大家演示了,GTEx数据库有人各组织中基因表达谱数据,下载整理这个数据可以绘制出ACE2受体在人体组织中的表达量情况以及可能的功能有哪些。
Chris生命科学小站
2023/02/28
4520
【画图】如何批量展现基因表达相关性?
pycirclize带你轻松绘制基因组图
R语言数据分析指南
2023/08/18
8631
pycirclize带你轻松绘制基因组图
R语言CMplot包绘制曼哈顿图
曼哈顿图本质上是一个散点图,用于显示大量非零大范围波动数值,最早应用于全基因组关联分析(GWAS)研究展示高度相关位点。它得名源于样式与曼哈顿天际线相似。
DoubleHelix
2019/08/07
16K1
R语言CMplot包绘制曼哈顿图
相关推荐
跟着Nature Communications学画图:R语言circlize包画弦图展示基因密度
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档