很多时候我们都是带着一个目的去绘图的,这样你的心态往往是这样的:我想要绘制一个热图,有哪个直接现成能用的工具能帮我完成这个任务。这个时候其实最快的是成为一个Excel boy/girl, 直接把数据导入鼠标“点点点”就出图了,而且改起来还很方便。
再进一步假设你可以写脚本了,你会基础的Python和R了,那么请问你会如何做呢?那么这个时候,你会去找一些现成能用的包,这些包能够提供一些高级函数。所谓的高级就是直接能用,不用去了解其原理、技术等细节。
接着,我们更进一步,假设你想自己开发了,你厌倦了用AI去微调,你厌倦了接受别人写的包的“洗脑”。这个时候你会如何选择呢?
撇开具体的工具谈选择都是虚无缥缈的
我们就以几个流行的编程语言为载体来聊一聊如何进行定制化的一些绘图操作。这也是可视化的进阶必备。
现在主流的语言还是 C++/JAVA/Python还有生物信息学领域的R。我们除去不常用的C++,这里讲一下JAVA/PY/R三门语言。
撇开绘画家模型谈可视化都是没有根基的
可视化不就是把点线面组合起来而已吗?
可视化不就是表格的延伸吗?
就像绘画一样,可视化不就是在一张画布上,用一个画笔绘制各种形状然后填充吗?
对的,记住这个绘画家模型,一张画布
,一直画笔
,于是就组成了这个绘制的庞大宇宙。
JAVA
R的话,你可以直接用JAVA自带的库 Swing
就行了,这个是GUI库是随着你装了JAVA之后自带的,不需要额外安装其它的东西。
它能够给你提供一个画布
和一只画笔
,如此一来你就可以绘制任何想绘制的东西。那么这个画笔
叫做什么呢?JAVA中叫做Graphics2D
。
这是个优点、也是一个缺点。优点在于你可以随便怎么画,缺点在于你要像机器一样去思考。
R
R其实有两大主要的绘图系统,我本人就专门研究了一下它的底层绘图系统。一个是最早自带的graphics
包自带的绘图,也就是你plot调用的绘图函数。 还有一个是后来变成R自带的grid
包绘图库,最早这个包只是CRAN的一个库,后来变成R自带的库了。
grid
比较著名,因为lattice和ggplot生态即使基于这个grid库的。这里也能够给你提供一个画布
和画笔
。这里它的画笔没有名字,而且你要绘制什么就直接grid.rect
,grid.circle
绘制即可。当然我感觉这主要还是因为R的面向对象系统,不是由计算机专业的人设计的。 我个人觉得是不完善的。
但是对于ggplot2
来说你要接受它的“洗脑” ,像我本人就有一点排斥这种洗脑。对于2D的图来说,它其实是很擅长的。但是对于一些需求,用它的绘制方式反而把简单问题变复杂了。
Python
Python自带的是 Tkinter
和 turtle
,这些也是它的GUI框架,定位等同于JAVA中的Swing,你可以基于该框架写桌面程序。不过在这个年代,Web是主流,桌面客户端已经不受关注了,很多开发也暂停了。它也提供了一个画布
和画笔
。
还有一个比较著名的事 Matlibplot,基于这个库区开发会比较好,生态链庞大。也能一绘画家模型来绘图。
说明
此为每日更新的大型写实电视连续剧《小小计算生物学》第一季,From-2023-08-20。 欢迎大家阅读,点赞,转发,关注。你们的欣赏是我不断坚持的动力。 欢迎关注: