开篇主题,FancyHeatmap支持HTML输出,可嵌入已有数据库浏览器框架!
写在前面
FancyHeatmap,是我给TBtools中“卡通式热图”命的名字。前述,在公众号上,我已经推出了这个功能相关的新手教程。在后续,我也发现有不少人已经应用:
- 在小麦上
- 在拟南芥上
- 在花生上
- 在小米上
- 在荔枝上 ....【注:均尚未发表,故不截图....】
用的人确实还是不会太少的。
为啥写FancyHeatmap
这是一种更为直观的表达量探索工具。相比于常规的热图,“卡通式热图”更符合人的直觉。当然,看起来也有趣一点。事实上,这个功能是“芯片盛行年代”时,就已经有人提出来了。他们发表了“eFP browser”文章。这是一个数据库框架,主要是方便别人搭建这类“卡通式热图”的网页数据库。然而...说实话,我第一次尝试部署作者提供的框架式,花了不只三天。主要问题是:
- 需要对网站部署和linux运维有基本认知,如果是要搭建数据库,那么这个觉悟是有的;如果只是想使用卡通式热图探索下表达量的多数人,那么花力气在数据库搭建上,确实得不偿失。
- 框架的依赖复杂,而且都是旧版本(我最后使用docker centOS 6 ...以及一些麻烦的调整才搞定的)
- MySQL~~~
- 原本是用于芯片的,对于FPKM数值,需要修改脚本 ....
综上,让我再碰这个数据库框架是不可能的。于是有一天,我开发JIGplot的过程中,灵机一动,实现一个ImageEle用于加载图片,不就行了吗?这个应该很简单啊。 很快,实现了FancyHeatmap第一版,需要的是三个文件:
- ColorCode2Sample.tab
- GeneExp.tab
- Image.tga
【注:可以看到,放大之后,图片失真】
非常简单。我之前也写过详细的教程在公众号《生信札记》上。而这个版本【注:第一版】也就是上述其他人所使用的版本。
支持SVG输入,得到矢量图输出和更多的交互式分析
第一版的FancyHeatmap,虽然比较多人使用。但是他存在一个致命的缺点:使用TGA格式的图片作为输入。TGA当然好,只是毕竟位图。图片输出的分辨率已经确定,带来两个问题:
- 无法提供良好的后续图片编辑功能,好的文章,往往一个Figure有几个Sub Figures
- 输出的图片用于网站,无法良好的应对缩放
Sad。我当然知道eFP browser似乎并没有想法去实现矢量图输入与输出。但是这个没关系啊。于是我进一步开发JIGplot,提供一个SVGtoJIGSubPanel的功能。换句话说,只要将SVG对象转换成JIGplot引擎的对象,那么我就可做任意我想做的操纵。Tada! 于是,FancyHeatmap比eFP browser又多了一个功能【前述:方便也是一个超越】,实现了矢量图输入与输出。当然,不仅如此。 既然不再是ImageEle,而是JIGElement的组合,那么我们可以直接在每个JIGElement上加动作,实现更多的交互分析可能。
支持HTML输出,可嵌入数据库类网站
Emmm... 事实上,自从TBtools推出FancyHeatmap的功能之后,不时有人联系过来。其中大半部分人其实是想在他们的数据库中嵌入这一功能。 前述已经提到,eFP browser本身就是做这个事情的,但我个人认为 ,除非公司层面也准备好了docker镜像,否则搭建成本一定很高。更不说docker image是否能够实现eFP browser的Sub HTML。Anyway,专门帮别人搭建数据库的公司还是有的,只要收费合理【注:个人估计2万以上是合理收费】,还是有不少公司愿意做的。 于是,我也收到了一些寻求合作的邮件,当然最后直接将合作转交给课题组的师弟去负责【注:很多时候,我并没有时间掺和也不想掺和】。 但是 ,刚才也提到了。目前无论是eFP Browser还是FancyHeatmap的已有应用,使用的都是第一版本:
- 位图输出,缩放失真
- 无法良好交互
FancyHeatMap的第二版使用SVG输入,已经搞定这些事情。然而,毕竟是Desktop Application。要搬到浏览器上面,JavaApplet....已经被时代所抛弃。于是,我今天灵机一动,搞个HTML输出不就行了吗? 三下五除二,【边带娃,边Coding】,很快,就实现了。
可以看到,完美!作为一个HTML文件,他就可以直接嵌入到其他任何已有数据库框架。另外,我还非常友好地提供了DIY的方式。
也就是,只要用SampleID,写一点JavaScript代码,你想怎么交互,那么就是你的事情....
于是,TBtools的FancyHeatMap从某意义上来说,似乎更有用了一些了。