首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用ggplot2来画带有对角线的热图

最近有人在群里提问,下面的热图该怎么画。

这张热图,在每一个格子里面用对角线一分为二,呈现了两类信息。图片来自于这篇文章的图1D。

通常,遇到这种需求,我都会直接检索,看看有没有现成的R包可用。可以提取检索词检索一下,这里主要信息应该是"对角线 热图 R语言",

查阅字典后,关键词就变成了英文,“diagonal heatmap r”。在浏览器中检索后得到以下结果。

然后有人给出了使用base plot画图的方案

复制到R语言后运行得到如下结果

这意味着,只要用基本功扎实,复现原图是没有问题的。

但是,我不会base plot,我只会用ggplot2, 检索了一圈也没有现成的解决方案,所以我就准备自己画。

自己画我就开始拆分这张图,一个热图的格子由上下两个三角形构成,我可以先画上三角形,再画下三角形,然后给他们分别配色就可以。

三角形可以通过来画。

上三角也是一样的

通过叠加图层,我们可以把两个三角形放在一起,这就是热图的一个小格子

解决了基本的元素,我就可以批量产生数据。

下面写了一个函数,批量算出指定行列的三角形数据。

因为我们的测试数据是33行,20列,所以用这个函数来产生对应个数的三角形

updata的数据是这样的,每一个框线里面都是一个三角形的数据

可以作图来测试一下上三角形

下三角也是一样的

现在我比较安心了,只要调整原始数据的格式,然后把他跟三角形的数据匹配起来就行。匹配就依靠group那一列

读入第一个数据, 行是基因,列是癌症类型

接下来宽数据变长

现在的数据是这个样子的

如果想要改变未来热图基因的顺序,可以使用因子的水平来控制

接下来就是给这个数据增加能够和三角形group匹配的列,

这一步的操作有trick,比如,因子转为数值,是需要先变成字符串再变成字符的,但是我们这里直接可以获取他的levels数值

最终获取了完整的作图数据

有了数据,作图就很简单了

第二个数据也是同样的处理

现在只要把两个图叠加在一起就行了,但是这里面有个问题。这两个图是分别用两个不同的变量来控制颜色的。

但是如果画在一起,ggplot2是不允许的,但是我记得Y叔发过的大部分帖子,我记得他曾经解决过这种情况,就去翻了一下。

答案在这个帖子里面

连续型和离散型数据一起画热图,外加分开配色和图例

这是我们常见的使用gheatmap做图的代码,为了实现不同数据类型的热图放在一起,让我们祭出包,只需要用,就可以把后面的fill映射和前面的分离开,然后我们就可以愉快地,再加一条gheatmap再画一个热图。

这样我的问题就完美解决了。

安装和加载 R包

分别抽离出基因名称和亚型名称,用来加在图上

指定三个颜色,来自小丫画图的144号作品

画图开始

现在来画侧边的标识,也是自己设计四边形的数据就行了

现在我们用把他们拼接起来

洲更说他对于图层顿悟了,就跟我问Y叔,他给出的答案是一样的,顿悟。但是我还没有,我还在找寻属于我自己的答案。学习图层,对我个人而言并不是为了画图,我就那么点数据,以后的知识以及足够去呈现了,我只是想从高手的视角去看待作图这件事,就跟Y叔给我启发最大的话那样:

图就是数据,数据就是图。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191220A070XF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券