gpt4 book ai didi

r - 在ggplot2散点图中使用伪色来表示密度

转载 作者:行者123 更新时间:2023-12-04 23:40:29 24 4
gpt4 key购买 nike

有人知道如何创建像屏幕截图中的图形吗?我试图在调整 alpha 时获得类似的效果,但这会使异常值几乎不可见。我只从名为 FlowJo 的软件中了解这种类型的图形,在这里他们将其称为“伪彩色点图”。不确定这是否是官方术语。

Screenshot from Corces et al., Nature Genetics 2016

我想专门在 ggplot2 中执行此操作,因为我需要分面选项。我附上了我的一个图表的另一个屏幕截图。垂直线描绘了某些基因组区域的突变簇。其中一些集群比其他集群更密集。我想用密度颜色来说明这一点。

Rainfall Plot

数据相当大且难以模拟,但这里有一个尝试。我看起来不像实际数据,但数据格式是一样的。

chr <- c(rep(1:10,1000))
position <- runif(10000, min=0, max=5e8)
distance <- runif(10000, min=1, max=1e5)
log10dist <- log10(distance)

df1 <- data.frame(chr, position, distance, log10dist)

ggplot(df1, aes(position, log10dist)) +
geom_point(shape=16, size=0.25, alpha=0.5, show.legend = FALSE) +
facet_wrap(~chr, ncol = 5, nrow = 2, scales = "free_x")

任何帮助都受到高度赞赏。

最佳答案

library(ggplot2)
library(ggalt)
library(viridis)

chr <- c(rep(1:10,1000))
position <- runif(10000, min=0, max=5e8)
distance <- runif(10000, min=1, max=1e5)
log10dist <- log10(distance)

df1 <- data.frame(chr, position, distance, log10dist)

ggplot(df1, aes(position, log10dist)) +
geom_point(shape=16, size=0.25, show.legend = FALSE) +
stat_bkde2d(aes(fill=..level..), geom="polygon") +
scale_fill_viridis() +
facet_wrap(~chr, ncol = 5, nrow = 2, scales = "free_x")

enter image description here

在实践中,我会采用初始带宽猜测,然后找出最佳带宽。除了采用惰性方法并仅绘制不带过滤的点( smoothScatter() 过滤除基于 npoints 的异常值之外的所有内容)之外,还会生成“平滑散点图”,就像您发布的示例一样。
smoothScatter()使用不同的默认值,所以结果有点不同:
par(mfrow=c(nr=2, nc=5))
for (chr in unique(df1$chr)) {
plt_df <- dplyr::filter(df1, chr==chr)
smoothScatter(df1$position, df1$log10dist, colramp=viridis)
}

enter image description here
geom_hex()将显示异常值,但不会显示为不同的点:
ggplot(df1, aes(position, log10dist)) + 
geom_point(shape=16, size=0.25, show.legend = FALSE, color="red") +
scale_fill_viridis() +
facet_wrap(~chr, ncol = 5, nrow = 2, scales = "free_x")

enter image description here

这个:
ggplot(df1, aes(position, log10dist)) + 
geom_point(shape=16, size=0.25) +
stat_bkde2d(bandwidth=c(18036446, 0.05014539),
grid_size=c(128, 128), geom="polygon", aes(fill=..level..)) +
scale_y_continuous(limits=c(3.5, 5.1)) +
scale_fill_viridis() +
facet_wrap(~chr, ncol = 5, nrow = 2, scales = "free_x") +
theme_bw() +
theme(panel.grid=element_blank())

enter image description here

让您非常接近默认值 smoothScatter()使用,但 hackishly 完成了大部分 nrpoints过滤代码在 smoothScatter()仅通过限制 y 轴限制来发挥作用。

关于r - 在ggplot2散点图中使用伪色来表示密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com