热图不实用技巧

作者: 邵扬_Barnett | 来源:发表于2020-08-12 15:15 被阅读0次

    其实excel就能做出来一张热图,例如下面这样。

    你甚至能定制化很多有意思的地方,比如这张图就实现了所谓的三列column name。第一列标注基因ID,第二列是基因名,第三列是功能性描述。
    具体做法就不讲了,因为你在TBtools、originlab、prim8甚至R里同样可以快速实现相同的功能。而excel里想要实现聚类,极坐标转换等操作相对麻烦。
    用TBtools举例:


    你只需要输入数据,点击确定。然后选中log2压缩数据,一张基本的热图就做好了。
    在这里很多人会问这个log2什么意思,还有人说自己的基因表达量是负值,为什么选中这个就变成从0开始了……基因负值说明你做了些奇怪的标准化。毕竟从基因表达量和相对表达量只有表达高和低甚至不表达……例如RNA-seq用counts计数(或者TPM),qPCR用relative expression,怎么都不会有负值出现存在的。而这里的log scale的意思就是给你的数据取对数。结合下面base=2和logwith=1不难理解:
    变换后的数据 = ,其中x > -1
    函数图像如下

    这样做的好处是整个图像过(0, 0)点。扯远了……数据取对数

    然后更改宽度

    差不多就能得到一张类似的图形了

    但是TBtools如何实现三列column name的操作呢?这个就是今天我想尝试的事情。首先最简单的办法就是在每个名字后面手动加入一定量的空格,比如下面这个图片的样子。



    然后作图



    感觉并不是很理想,三列并没有对齐。那么有什么改进的办法呢?我们可以尝试加入不一样多数量的空格,通过excel的函数功能我们可以轻松的实现这一功能。

    其中用到了两个函数

    =LEFT($B$4,35-LEN(B5))
    =B5&C5&D5&E5&F5
    

    第一个函数是根据前一列的长度给这个单元格赋予一定数量的空格。其中表格B4里存入大量的空格,len()负责计算前一个单元格的字符长度,注意35这个数值应当大于前一个单元格的最大长度。
    后一个函数把所有字符合起来。其实可以写的更干净的,这里方便理解就摊开一点。
    好了右边的名字看起来比之前加入固定空格数要好看不少了。但是还是不齐,这主要是因为有些符号虽然占了1个字符字节数但是并没有占用1个字符宽度。如果你的基因ID一致,那么此时应该就没有任何问题。


    如果你的数据ID不是很一致呢?比如你的gene ID有很多奇怪的符号,此时你就需要一些特别的姿势了。
    最简单的方法就是你把图片另存为svg格式,然后用矢量图编辑软件编辑。这里不推荐AI之类的,因为是商用的收费软件,如果你使用盗版,这些公司会给你发律师函。如果你有钱可以试试affinity designer(之前最低的时候不到200),而如果不想花这个钱不妨试试inkscape。这里顺便推荐一下专注于科研作图的up主。
    https://www.bilibili.com/video/BV1Hp4y1S768
    参考他的教程你也能轻松编辑矢量图文件。

    如果你还是觉得麻烦,我推荐你试试powerpoint。
    是的powepoint也能编辑svg文件。可能多数时候大家更倾向于保存为300 dpi的png或者jpeg,但保存为svg矢量图才会让你的图片有更大的后期编辑空间。只要你的ppt版本支持矢量图导入(我买的office 365),我强烈推荐你导入矢量图。
    接下来只需要将图片转换为形状

    再取消分组

    你的热图就变成了一个一个的小组件了!

    接下来的操作我想大概人人都会吧。毕竟教ppt使用技巧的太多了!
    折腾完了另存为图片
    image.png

    然后另存为svg就好了



    接下来怎么折腾都随便你了。说个题外话,TBtools导出的svg是相当规范的。像originlab导出的格式会默认把所有文字变成图形符号,而ppt导出的svg的文字框经常乱飘……后期二次、三次编辑会非常麻烦。
    最后分享一个彩蛋,其实三列column name在TBtools中也能实现。但是在作者没有强化编辑图层功能和优化图形操作前,这个功能是没有意义的。


    相关文章

      网友评论

        本文标题:热图不实用技巧

        本文链接:https://www.haomeiwen.com/subject/qrqpdktx.html