艺术家好色,科学家也好色。娱乐圈好色,科研圈也好色。老板好色,搬砖族也好色。一张漂亮的图,对展示结果和工作的意义具有重要帮助。作图的工具有很多,可以分为两种人工画和代码画。

人工画包括使用PPT, PS, AI,要求比较高,需要使用者软件操作熟练,有一定的艺术素养。生信宝典傻瓜系列的主创海哥是就是PPT和EXCEL的大牛 (话说海哥还有一篇这方面的文章没交稿呢)。之前实验室发表的文章有PS绘制的封面、PPT绘制的模式图,都是效果不错的手绘。

但对科研来讲,基于数据的图还是相对多一些的,点线柱箱热泡,一个个的手绘确实有点麻烦,更重要的是容易漏掉点或产生偏差,更有甚者手一抖差异就出来了。所以还是需要借助代码来实现。下面主要介绍几种数据绘图工具。

Perl GD模块

最开始学生信时,使用的是Perl语言,文本处理的经典语言,正则表达式和直接运行Linux命令都是其出色的特征。虽然总有人说Perl写起来或读起来麻烦,但个人还是挺喜欢Perl的风格和语法的,事实上也没有那么难。另外小骆驼的代言也代表着一股韧劲。那时就是一味地什么都用perl来处理,包括画图,就使用了GD模块。从一堆序列中寻找重复序列,然后再标记在序列上,画出类似于功能域结构的图,挺原始的画法,一个框框的往上摞。后来阴差阳错,没再继续使用Perl也没关注是不是还有其它好用一些的库。

GNUplot

GNUplot 老牌的绘图工具,经典的一个命令出图,使用语法也更像写出一段英文。不过对我来说,用到最后,就是代码封装了。

# set terminal pngcairo  transparent enhanced font "arial, 10" fontscale 1.0 size 600,  400 
# set output 'simple.4.png'
set key fixed left top vertical Right noreverse enhanced autotitle box lt black linewidth 1.000 dashtype solid
set samples 200, 200
set title "Simple Plots" 
set title  font ",20" norotate
DEBUG_TERM_HTIC = 119
DEBUG_TERM_VTIC = 119
plot [-30:20] besj0(x)*0.12e1 with impulses,  (x**besj0(x))-2.5 with points

更多的例子和炫图如下,

Latex

对OFFICE的不通和缺少Windows电脑,使我转向了Latex的使用,在文档和幻灯自动化生成方面提供了很大的便利。Latex包也有一些可用来绘图,TexShade是其中一个绘制蛋白序列比对和特征的图,示例如下。

但后来出现的OFFICE系列,使得我对latex的使用最后只局限于自动化文档的生成了。

EXCEL 2007+

OFFICE2007的出现刷新了我以往对OFFICE操作的认识,全新的操作,全新的界面,使得原来不大会OFFICE的我也没落下太多,慢慢熟悉了这个风格的文档记录和图形绘制。OFFICE最简单方便的代码画图是使用EXCEL,简单到一般不需要写代码,只需要选择数据,做些调整就好了。而且还可以设置模板,保证一批图一致的格式。临时性的画图,一般选择这个来画。但如果需要不断调整数据或者超出我excel水平的图,还是选择其它方式来画。

前几天有人拿了3D不等高饼图在群里问怎么来的?如下,EXCEL的SmartArt搞出来的

Python作图

弃用GNU plot后,主要转向Python(这部分在生物信息之程序学习中有一些介绍)。Python绘图库,当时用的是大名鼎鼎的matplotlib,很好的包,但总是理解不了那个构造逻辑。所以虽然总是用Python, 但一般不用Python作图。后来学了Pandas之后发现Pandas矩阵中有些不错的自带作图方法,简单实用,尤其是配合交互式作图库Plotly可以绘制很漂亮有有用的在线交互图。不过据说seaborn也是很好用的工具,风格有些像ggplot2

import pandas as pd
import random
import seaborn as sns
df = pd.DataFrame()
	
df['x'] = random.sample(range(1, 100), 25)
df['y'] = random.sample(range(1, 100), 25)
sns.kdeplot(df.y, df.x))

![]((http://blog.genesino.com/images/pandas_with_seaborn_9_1.png)

R作图

在接触ggplot2之前,用R绘图跟前面提到的工具也没太大差别,总体感觉就是好用但繁琐。