基于 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的主要内容,如果未能解决你的问题,请参考以下文章
R语言绘制火山图(volcano plot)实战:为差异表达基因(DEGs)添加颜色基于显著性阈值进行点的颜色美化为选定基因添加标签