96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

生信图绘制-可视化!Circos 图绘制,更简单更灵活更方便~

原创:找图网 2023-04-19 13:47:31
  • R循环画图

  • R是我们做生信进行图形展示较为常用的软件,我们在经常使用R进行数据展示,画一个或者几个图,但我们做生信的,批量化是我们最重要的目标之一。比如有时候可能有几万个图需要画,我们不可能一个一个的去画图,这时候就需要进行批量画图。

    R循环画图循环画图挺简单,主要是在()之前,加上一句print(p)即可,这里的p为画图对象,如下所示:

    ```

    for (i in cluster){

    name<-paste(i,'cluster_VlnPlot',sep='_')

    mkdirs(paste(outdir,'3_marker',sep='/'),name)

    for(m in 1:nrow()){

    if (["cluster"][m,]==i){

    filename<-paste([m],'',sep='_')

    graph <- paste(name,filename,sep='/')

    pdf(graph, w=12, h=8)

    p<-VlnPlot(object = , = c([m]), =TRUE, = -1,=color,size.x.use = -1)

    print(p)

    plot_grid(p)

    ()

    }

    }

    }

    ```

    这里print(p)是循环的关键

    我们在画图或者操作的时候,可能有时候某个基因不在我们已有的文件,我们直接循环画图,将会出现报错,而且这个报错后面所有的图都将无法正常完成,因此这里需要使用try语句,如果报错,直接打印报错信息,并且跳过此图,直接画下一幅图,比如:

    ```

    for (i in 1:cluster_num){

    tryCatch({gene<-(paste(i,"diff_gene_",sep="_"),sep=",",header = TRUE, = NULL)

    graph <- paste(prefix,i,'_diff_',sep='_')

    pdf(graph,w=12, h=8)

    gene_FeatureHeatmap<-c()

    if (length(gene[,1]) >=6){

    gene_FeatureHeatmap<-(gene[,1][1:6])

    }else{

    gene_FeatureHeatmap<-(gene[,1])

    }

    p<-FeatureHeatmap(, = gene_FeatureHeatmap, = "stim", = 0.25, = "top", = 3, =TRUE)

    print(p)

    plot_grid(p)

    ()

    },error=function(e){print(paste(i,"--聚类不在某个组中,差异分析画所有聚类的热图出现错误",sep=""))} )

    }

    ```

    这里主要使用的语句为:tryCatch({},error=function(e){print(报错信息)} )

    这个是我的第一版的try语句画图,并且也成功运行过很多次,包括循环分析、差异分析。

    3.第二版循环画图

    第一版画图,其实是有bug,只是一直没有遇到画图报错的循环,某次,我再运行这个脚本,其中某个基因的数据在我们画图文件中不存在,结果直接报错,画不出来图,报错信息如下:

    Too many open devices r

    开始一直不知道原因,后面通过查询报错信息,找到原因(

    ),原来是因为报错的时候,pdf文件已经建立,但是没有关闭,如果循环太多,将会出现 Too many open devices r 信息。

    输入命令:()

    # tiff jpeg tiff jpeg tiff jpeg tiff jpeg tiff tiff tiff tiff tiff jpeg tiff tiff tiff # 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

    得到如上的信息,说明还有十几张图还没有关闭,使用()关闭十几次后,就可以正常画图了。

    找到原因了,那就得解决,这里的解决方案就是在报错的时候,我们在关闭一下图片文件,并且删掉改文件,打印报错信息,就解决此问题,具体命令如下:

    ```

    if (opt$gene=='yao'){

    print('没有输入特定的基因做小提琴图和箱线图,continue!')

    }else{

    print("输入了特别的基因,将对特定的基因进行热图和小提琴图")

    costmer_gene_file<-(opt$gene,sep='\t')

    costmer_gene<-unique(costmer_gene_file[,1])

    mkdirs(outdir,'3_marker/costmer_gene/')

    setwd(paste(outdir,'3_marker/costmer_gene',sep='/'))

    for (m in 1:length(costmer_gene)){

    tryCatch({

    print("开始进行特定的基因表达量分布图绘制。。。。。。。。")

    filename<-paste(costmer_gene[m],'',sep='_')

    pdf(filename, w=12, h=8)

    p<-FeaturePlot(object =, = (costmer_gene[m]), = "q9", = 0.5, = c("lightgrey","blue"))

    print(p)

    ()

    },error=function(e){

    ()

    print(paste(costmer_gene[m],"--不在分析分析结果中,基因表达量分布图出现错误,请注意核对",sep=""))

    cmd<-paste('rm ',filename,sep=' ')

    system(cmd)

    } )

    }

    for (m in 1:length(costmer_gene)){

    tryCatch({

    print("开始进行特定的基因进行小提琴图绘制。。。。。。。。")

    filename<-paste(costmer_gene[m],'',sep='_')

    pdf(filename, w=12, h=8)

    p<-VlnPlot(object = , = (costmer_gene[m]), =TRUE, = -1,=color,size.x.use = -1)

    print(p)

    ()

    },error=function(e){

    ()

    print(paste(costmer_gene[m],"--不在分析分析结果中,基因表达小提琴图出现错误,请注意核对",sep=""))

    cmd<-paste('rm ',filename,sep=' ')

    system(cmd)

    } )

    }

    cmd<-paste('ls ',paste(outdir,'3_marker/costmer_gene',sep='/'),'/*.pdf|while read i;do convert $i `dirname $i`/`basename $i .pdf`.png ;done',sep='')

    print(cmd)

    system(cmd)

    }

    ```

    到此,循环画图没有问题了。

    2019年1月22日

  • 可视化!Circos 图绘制,更简单更灵活更方便~

  • 为什么 TBtools 用起来舒服,相比于不少其他软件,同质非同质的?我想了很久,可能原因之一,即“开发者即用户本身”,简单来说,“我写的软件是就是给自己用的”,而不是去满足其他人的什么需求。但事实上,只要是相关领域,大家的需求总是类似的。我从来专门征集过大家都普遍需求的功能,但只会开发我觉得对我有用的部分。这样的模式,应该是最合适的。

    回到主题,Circos 图是目前生信大数据时代常用的可视化方式之一,可以全基因组尺度可视化各类 Track。TBtools 的 Circos 绘制功能,我之前就提过,写出来也只花了一个中午,因为我早就在 JIGplot 绘图引擎中加入的极坐标系功能,画 Circos 无非就是一个柱形图,再做一次极坐标转换....

    前面的 Circos 主界面如下

    咋看下去设计还可以,我们直接 Load 以前的 Project。加载完了如下

    Show Control Dialog 即控制参数界面如下

    为了解决上述问题,我思考了挺长,主要还是需要自己设计一个GUI功能。这应该是我个人的问题,我不太愿意使用一些第三方类库,如果是非开源,那么我没钱可以买授权;如果是开源,你用了那么就有一些奇奇怪怪的人喊你也要开源你自己的项目(PS:其实只要你不修改该项目源码,绝大多数时候并不需要开源自己的项目)。Anyway,只基于 Java 类库类做 GUI 其实也不容易,毕竟可用的组件还是20多年前的那些。大体折腾了下,得到如下

    开发了这个组件之后,我们就可以通过简单隐藏菜单来实现。于是,补充另外一些新的调整,现在的 Advanced Circos 界面如下

    点击可视化,可以看到

    一两年前,有个朋友要用 TBtools 绘制 Circos 图,用来用去,可能不太习惯,最后他应该是放弃了。回头来看,原因简单。我自己用着也知道,确实原来的版本,用起来不舒服....现在优化好了,不过这个朋友估计也不会用了,或者也毕业了。

    路漫漫其修远兮~希望这位朋友科研顺利,事业有成。

  • R语言绘图(ggplot2、ggpubr)从入门到精通05--柱状图美化之分组修改 - 草稿

  • 本系列课程要求大家有一定的R语言基础,对于完全零基础的同学,建议去听一下师兄的《生信必备技巧之――R语言基础教程》。本课程将从最基本的绘图开始讲解,深入浅出的带大家理解和运用强大而灵活的ggplot2包。内容包括如何利用ggplot2绘制散点图、线图、柱状图、添加注解、修改坐标轴和图例等。

    本次课程所用的配套书籍是:

    《R Graphic Cookbooks》

    除了以上的基本图形外,师兄还会给大家讲解箱线图、提琴图、热图、火山图、气泡图、桑基图、PCA图等各种常用的生信图形的绘制,还不赶紧加入收藏夹,跟着师兄慢慢学起来吧!

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com