R语言携手Python绘制weblogo图

2019-07-31 09:40:35 浏览数 (1)

我们知道R语言在作图统计方面很是实用,但是在其他游戏开发、网页制作、人工智能等很多方面相对于python是很局限。今天我们来以weblogo为例展示如何在R语言中调用python。

首先了解下Weblogo,其是由CrooksGE, Hon G, Chandonia JM, Brenner SE共同开发的来使基因序列的描述尽可能的简单以及可视化。具体的介绍详见http://weblogo.berkeley.edu/。

此可视化的分析程序基于Python语言实现的,包括了网页版以及python包版本。

网页版的我们就不赘述了,在其官网只要输入fasta文件就可以获得相应的weblogo图。

本期我们主要实现通过调用python中的weblogo包将最终的weblogo图在R语言中保存。

首先,我们要建立python与R语言之间的联系需要一个包rPython。此包主要基于的开发环境是Linux。我们前面介绍过如何让Linux下的R包在windows下运行。在此不再赘述。当然,这次还涉及到与python的对接。

接下来我们介绍下,在安装过程中的几个注意事项:

  1. rPython包的下载,下载地址:https://github.com/cjgb/rPython-win。
  2. 解压,修改configure.win中的python路径改为你电脑安装路径。
  3. 首先在R语言导入devtool包,然后install(rPython文件夹),安装完后。
  4. 当然,可能在安装的时候会缺少一个依赖包RJSONIO。直接官网下载然后本地安装就可以(前提是你的devtool已经载入,rtool安装没有问题)。

在python中安装对应的包一般使用pipinstall 包。在python中weblogo包名字不变,但是在安装后导入需要注意其名字改成了weblogolib。

安装好以上的两个包接下来就是绘制weblogo图。

下面我们看下在python如何绘制weblogo图,下面是一个示例程序:

from weblogolib import *

fin = open('G:/weblogo-master/test_weblogo/data/cap.fa')

seqs = read_seq_data(fin)

data = LogoData.from_seqs(seqs)

options = LogoOptions()

options.title = "A Logo Title"

options.fineprint = 'Python plot'#标注出自于Python语言

format = LogoFormat(data, options)

eps = eps_formatter( data, format)

file=open('weblogo.eps','w')

file.write(eps)

file.close()

最终图像需要用AI软件打开:

接下来我们在R中去实现我们的weblogo图绘制。

首先看下rPython中相关的函数:

python.assign用于将R语言变量传递给python,与之相对应的是python.get函数。

python.assign(var.name, value, ...)

python.call函数用于将执行python命令

python.call( py.fun, ..., simplify = TRUE,as.is = FALSE )

python.exec函数用于在R语言中执行Python命令

python.exec( python.code, get.exception =TRUE )

我们来看下如何实现两者的结合:

library(rPython)

python.exec('from weblogolib import *')

python.exec("fin =open('G:/weblogo-master/test_weblogo/data/cap.fa')")

python.exec("seqs =read_seq_data(fin)")

python.exec("data =LogoData.from_seqs(seqs)")

python.exec("options =LogoOptions()")

python.exec("options.title = 'A LogoTitle'")

python.exec("options.fineprint = 'Rplot'")#标注出自于R语言

python.exec("format = LogoFormat(data,options)")

python.exec("eps = eps_formatter(data, format)")

weblogo=python.get('eps')

as=file('aa.eps',open='wb')

writeBin(weblogo,as)

close(as)

绘制结果:

0 人点赞