热图绘制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了热图绘制相关的知识,希望对你有一定的参考价值。

参考技术A

公众号链接: http://mp.weixin.qq.com/s/mNSkf1rjWTCtE1pIOuI2rA

热图是做分析时常用的展示方式,简单、直观、清晰。可以用来显示基因在不同样品中表达的高低、表观修饰水平的高低等。任何一个数值矩阵都可以通过合适的方式用热图展示。

本篇使用R的 ggplot2 包实现从原始数据读入到热图输出的过程,并在教程结束后提供一份封装好的命令行绘图工具,只需要提供矩阵,即可一键绘图。

上一篇讲述了Rstudio的使用作为R写作和编译环境的入门,后面的命令都可以拷贝到Rstudio中运行,或写成一个R脚本,使用 Rscript heatmap.r 运行。我们还提供了Bash的封装,在不修改R脚本的情况下,改变参数绘制出不同的图形。

绘图首先需要数据。通过生成一堆的向量,转换为矩阵,得到想要的数据。

注意:运算符的优先级。

Vector转为矩阵 (matrix),再转为数据框 (data.frame)。

虽然方法比较繁琐,但一个数值矩阵已经获得了。

还有另外2种获取数值矩阵的方式。

可以看到列名字中以数字开头的列都加了 X 。一般要尽量避免行或列名字以 数字开头 ,会给后续分析带去一些困难;另外名字中出现的非字母、数字、下划线、点的字符都会被转为 ,也需要注意,尽量只用字母、下划线和数字。

与上一步类似,只是改为文件名,不再赘述。

数据读入后,还需要一步格式转换。在使用ggplot2作图时,有一种长表格模式是最为常用的,尤其是数据不规则时,更应该使用 (这点,我们在讲解箱线图时再说)。

数据转换后就可以画图了,分解命令如下:

热图出来了,但有点不对劲,横轴重叠一起了。一个办法是调整图像的宽度,另一个是旋转横轴标记。

设置想要的颜色。

调整legend的位置。

调整背景和背景格线以及X轴、Y轴的标题。

合并以上命令,就得到了下面这个看似复杂的绘图命令。

图形出来了,就得考虑存储了,

至此,完成了简单的heatmap的绘图。但实际绘制时,经常会碰到由于数值变化很大,导致颜色过于集中,使得图的可读性下降很多。因此需要对数据进行一些处理,具体的下次再说。

根据 Seaborn 中的散点图绘制热图

【中文标题】根据 Seaborn 中的散点图绘制热图【英文标题】:Plotting a heatmap based on a scatterplot in Seaborn 【发布时间】:2022-01-21 18:02:50 【问题描述】:

有什么方法可以根据散点图在 seaborn 中绘制热图?例如,我有以下散点图,并希望以这样的方式绘制相应的热图,使热图中的较暗点在散点图中显示更拥挤的区域。

【问题讨论】:

不确定是否有内置函数,但您是否查看过 Kernel Density Estimators? 【参考方案1】:

您可以再使用一个变量来跟踪其附近的点数。然后在散点图中使用该可变广告颜色。

【讨论】:

【参考方案2】:

matplotlib.pyplot.hist2d 将在“常规”matplotlib 中完成此操作。看起来seaborn.histplot 也可以做到这一点(向下滚动示例,它谈到了在指定xy 参数时制作二元直方图)

【讨论】:

【参考方案3】:

sns.histplot(x=x_data, y=y_data) 将创建给定数据的二维直方图。 sns.kdeplot(x=x_data, y=y_data) 会对这些值进行平均,从而创建一个二维概率密度函数的近似值。

这是使用 iris 数据集的 3 个图之间的比较。

import matplotlib.pyplot as plt
import seaborn as sns

fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(15, 4), sharex=True, sharey=True)

iris = sns.load_dataset('iris')
sns.set_style('darkgrid')
sns.scatterplot(x=iris['sepal_length'], y=iris['sepal_width'], ax=ax1)
sns.histplot(x=iris['sepal_length'], y=iris['sepal_width'], ax=ax2)
sns.kdeplot(x=iris['sepal_length'], y=iris['sepal_width'], fill=True, ax=ax3)

ax1.set_title('scatterplot')
ax2.set_title('histplot')
ax3.set_title('kdeplot')
plt.tight_layout()
plt.show()

【讨论】:

您可能还对在 x 和 y 方向添加直方图(或 kde 图)的sns.jointplot() 感兴趣。

以上是关于热图绘制的主要内容,如果未能解决你的问题,请参考以下文章

如何用R语言绘制热图

运用 R语言 pheatmap 包绘制热图进阶部分

R 数据可视化 —— 聚类热图 pheatmap

一个函数实现基因内具有多种突变类型的热图的绘制

使用“ gridGraphics”软件包绘制多个热图

在烛台图顶部绘制热图