基于 ggplot2 中多个基因表达的颜色 UMAP

Posted

技术标签:

【中文标题】基于 ggplot2 中多个基因表达的颜色 UMAP【英文标题】:Colour UMAP based on expression of multiple genes in ggplot2 【发布时间】:2021-12-05 02:16:33 【问题描述】:

我只是想知道是否有人对基于同时多个基因的表达在 ggplot 中制作的 UMAP 着色有任何经验?我想做的是类似于 Seurat 特征图中的混合功能,但使用 3 个基因/颜色而不是 2 个。

我正在寻找这样的东西:

基因的颜色在重叠的地方结合在一起。

到目前为止,我所做的是

ggplot(FD, vars = c("UMAP_1", "UMAP_2", "FOSL2", "JUNB", "HES1"), aes(x = UMAP_1, y = UMAP_2, colour = FOSL2)) +
geom_point(size=0.3, alpha=1) +
scale_colour_gradientn(colours = c("lightgrey", colour1), limits = c(0, 0.3), oob = scales::squish) +
new_scale_color() +
geom_point(aes(colour = JUNB), size=0.3, alpha=0.7) +
scale_colour_gradientn(colours = c("lightgrey", colour2), limits = c(0.1, 0.2), oob = scales::squish) +
new_scale_color() +
geom_point(aes(colour = HES1), size=0.3, alpha=0.1) +
scale_colour_gradientn(colours = c("lightgrey", colour3), limits = c(0, 0.3), oob = scales::squish)

其中 FD 是一个数据框,其中包含来自 seurat 对象的 UMAP 坐标和三个感兴趣基因的表达水平的信息。我所能得到的只是一个图,其中一层的点掩盖了它下面的点,我试过弄乱颜色、渐变、阿尔法和比例,但我猜我做错了。

如果有人知道如何完成这项工作或对其他尝试有任何建议,将不胜感激。

【问题讨论】:

【参考方案1】:

在 ggplot2 中没有“普通”的方式来做到这一点。可以使用 ggnewscale 包预先计算混合颜色并附加不可见的图层和比例。

为了重现性的目的,让我们假设我们想要制作鸢尾花数据集的 UMAP,并将叶子的描述符用作“基因”。

library(ggplot2)
library(scales)
library(ggnewscale)
#> Warning: package 'ggnewscale' was built under R version 4.1.1

# Calculate a UMAP
umap <- uwot::umap(iris[, 1:4])

# Combine with original data and blended colours
df <- cbind.data.frame(
  setNames(as.data.frame(umap), c("x", "y")), 
  iris,
  colour = rgb(
    rescale(iris$Sepal.Length),
    rescale(iris$Sepal.Width),
    rescale(iris$Petal.Length)
  )
)

ggplot(df, aes(x, y, colour = colour)) +
  geom_point() +
  scale_colour_identity() +
  new_scale_colour() +
  # shape = NA --> invisible layers
  geom_point(aes(colour = Sepal.Length), shape = NA) +
  scale_colour_gradient(low = "black", high = "red") +
  new_scale_colour() +
  geom_point(aes(colour = Sepal.Width), shape = NA) +
  scale_colour_gradient(low = "black", high = "green") +
  new_scale_colour() +
  geom_point(aes(colour = Petal.Length), shape = NA) +
  scale_colour_gradient(low = "black", high = "blue")
#> Warning: Removed 150 rows containing missing values (geom_point).
#> Warning: Removed 150 rows containing missing values (geom_point).
#> Warning: Removed 150 rows containing missing values (geom_point).

在更具实验性的方面,我在 github 上有一个具有相关功能的包。

library(ggchromatic) # devtools::install_github("teunbrand/ggchromatic")

ggplot(df, aes(x, y, colour = rgb_spec(Sepal.Length, Sepal.Width, Petal.Length))) +
  geom_point()

由reprex package (v2.0.1) 于 2021 年 10 月 18 日创建

一个小注解:当数据的某些属性映射到不同的颜色通道时,绘图变得非常难以解释。

【讨论】:

非常感谢您的回答,这正是我想要的,您在 github 上的包看起来也很适合。 (我也同意你的观点,整个重叠的颜色通道看起来有点乱,但老板至少一心一意看到它哈哈)

以上是关于基于 ggplot2 中多个基因表达的颜色 UMAP的主要内容,如果未能解决你的问题,请参考以下文章

带有 ggplot2 的条形图用于基因表达

R语言绘制火山图(volcano plot)实战:为差异表达基因(DEGs)添加颜色基于显著性阈值进行点的颜色美化为选定基因添加标签

用 ggplot2 绘制基因表达谱

基因差异火山图怎么看

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

巧用热图展示基因分布的总体趋势