有人知道如何创建像屏幕截图中的图形吗?我试图在调整 alpha 时获得类似的效果,但这会使异常值几乎不可见。我只从名为 FlowJo 的软件中了解这种类型的图形,在这里他们将其称为“伪彩色点图”。不确定这是否是官方术语。
我想专门在 ggplot2 中执行此操作,因为我需要分面选项。我附上了我的一个图表的另一个屏幕截图。垂直线描绘了某些基因组区域的突变簇。其中一些集群比其他集群更密集。我想用密度颜色来说明这一点。
数据相当大且难以模拟,但这里有一个尝试。我看起来不像实际数据,但数据格式是一样的。
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")
在实践中,我会采用初始带宽猜测,然后找出最佳带宽。除了采用惰性方法并仅绘制不带过滤的点(
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)
}
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")
这个:
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())
让您非常接近默认值
smoothScatter()
使用,但 hackishly 完成了大部分 nrpoints
过滤代码在 smoothScatter()
仅通过限制 y 轴限制来发挥作用。
关于r - 在ggplot2散点图中使用伪色来表示密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039073/