
寫(xiě)在前面
久前,我開(kāi)放了 TBtools 掰彎熱圖的功能。我自認(rèn)為是TBtools的掰彎熱圖,至少目前還是市面上獨(dú)此一家,同時(shí),保證了所有人都上手就會(huì)用。這一功能,也已經(jīng)被在一些期刊論文所引用。
無(wú)論是TBtools的Amazing Heatmap,還是后面增加的 掰彎 模式,都只是我個(gè)人開(kāi)發(fā)繪圖引擎 JIGplot 過(guò)程中測(cè)試實(shí)用性而順手寫(xiě)出來(lái)的。然而,可能往往你做的東西不會(huì)得到認(rèn)可,而期間所得到的副產(chǎn)品則更多人喜愛(ài)。
盡管如此,社交網(wǎng)絡(luò)上,總是存在這樣那樣的人,他們或者用與不用你寫(xiě)的工具,但卻一定會(huì)對(duì)你做的事情指指點(diǎn)點(diǎn)。正如:
- ?熱圖有什么?
- ?掰彎的熱圖,又有什么用?
直的不行,那就彎啊
大丈夫,能屈能伸。這個(gè)道理,過(guò)分簡(jiǎn)單。前兩天正好想到一個(gè)不錯(cuò)點(diǎn),改進(jìn)了JIGplot,于是掰彎熱圖也得到一定的增強(qiáng)。所以,可以用以下兩個(gè)圖片來(lái)回復(fù)上述問(wèn)題。


版面總是有限的。注意到,上述兩張圖的長(zhǎng)寬幾乎一致。經(jīng)典的長(zhǎng)方形熱圖(要么太高,要么太胖),事實(shí)上不利于排版(放不下,要么就字體縮得太小)。用有限的空間展示更多的信息,那么掰彎時(shí)最常見(jiàn)的操作,比如Circos。
開(kāi)放TBtools,轉(zhuǎn)眼近四年。無(wú)論是《生信札記》公眾號(hào)的后臺(tái),或者是使用交流QQ群(~10,000人在群)。每天我都會(huì)看到這樣那樣的使用問(wèn)題,意見(jiàn)更或者建議。絕大多數(shù)都是善意的,也是好的。但也一直收到各種各樣的惡語(yǔ),無(wú)論他們用或沒(méi)用過(guò)TBtools,受益或者沒(méi)受益于TBtools。一開(kāi)始,我當(dāng)然是不爽的。后來(lái),我早就習(xí)慣的,脾氣也慢慢變好了,講真的,現(xiàn)實(shí)中各式各樣的人遇到過(guò),網(wǎng)絡(luò)上,更奇葩的各式各樣的人,我也遇到過(guò)。真誠(chéng),欣賞,厭惡,擔(dān)心,陰陽(yáng)等等,其實(shí)也很有趣。你得到了朋友,也會(huì)得到敵人。
好的,那么回到主題,既然我都淡定了,那么為什么還要寫(xiě)這個(gè)推文。
TBtools熱圖功能增強(qiáng)了!
知道我的人都知道,近兩個(gè)月來(lái),我一直在忙家里的事情。這對(duì)個(gè)人工作的開(kāi)展來(lái)說(shuō),有利有弊。弊端簡(jiǎn)單且明顯,所有時(shí)間都碎片化,幾乎無(wú)法很好很快地完成一些任務(wù)。好處就是....既然啥都干不了,那就瞎想。瞎想是我個(gè)人從高中養(yǎng)成的習(xí)慣。有些搞不定的問(wèn)題就記著,有碎片化時(shí)間了,比如坐車(chē),睡不著,那就開(kāi)始想這些問(wèn)題。很多時(shí)候,這些問(wèn)題總會(huì)一個(gè)一個(gè)被解決。昨天,我正好想到了熱圖工具相關(guān)的可增強(qiáng)的點(diǎn)。
渲染速度更快
之前的TBtools版本,繪制十多個(gè)樣本X上千個(gè)基因的熱圖時(shí),存在一定的卡頓。針對(duì)這個(gè),我優(yōu)化了:
- 數(shù)據(jù)框加載與讀取邏輯,因?yàn)槭亲约簭牧銓?xiě)的dataframe, 支持了各式各樣的NA,空格,缺列等等
- 數(shù)據(jù)框存儲(chǔ)與操作,....不在使用數(shù)列的數(shù)列,直接使用二維數(shù)組。
- 顏色映射邏輯,熱圖其實(shí)就是畫(huà)性狀,按照一定的尺度進(jìn)行顏色映射,JIGplot原本直接使用我之前寫(xiě)的JJplot2的ColarMapper。小時(shí)候的我Naive,那個(gè)邏輯不行,現(xiàn)在已經(jīng)更新。
....
聚類(lèi)速度更快
與上述類(lèi)似,聚類(lèi)涉及到距離計(jì)算和聚類(lèi)操作,兩個(gè)步驟,我都做了調(diào)優(yōu)。距離的計(jì)算中,通過(guò)存一個(gè)Hash,減少重復(fù)計(jì)算。聚類(lèi),也是類(lèi)似。
掰彎功能增強(qiáng)
之前的TBtools掰彎熱圖,其實(shí)...不支持列聚類(lèi),當(dāng)然,并沒(méi)有太多人發(fā)現(xiàn)或者其實(shí)很少人需要對(duì)列聚類(lèi)?不過(guò)這一只是我想做的事情。最后當(dāng)然是完成了。
- 列名能更好的排布
- 列聚類(lèi)樹(shù)終于支持掰彎!

....
當(dāng)然還有更多,只是,那些似乎不太值得寫(xiě)出來(lái)。
寫(xiě)在最后
追求卓越,成功就會(huì)緊隨而至,嗎?