Pee*_*che 4 r bioinformatics ggplot2
有人知道如何创建截图中的图形吗?我试图获得类似的效果调整alpha,但这会使异常值几乎不可见.我只从一个名为FlowJo的软件中知道这种类型的图形,这里它们称之为"伪彩色点图".不确定这是否是一个官方用语.

我想在ggplot2中专门做,因为我需要faceting选项.我附上了我的一张图表的另一张截图.垂直线描绘了某些基因组区域的突变簇.其中一些集群比其他集群密集得多.我想用密度颜色来说明这一点.

数据非常庞大且难以模拟,但这是一次尝试.我看起来不像实际数据,但数据格式是一样的.
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")
Run Code Online (Sandbox Code Playgroud)
任何帮助都非常感谢.
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")
Run Code Online (Sandbox Code Playgroud)
实际上,我会先考虑初始带宽,然后计算出最佳带宽.除了采用惰性方法并且只绘制没有过滤的点(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)
}
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)
这个:
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())
Run Code Online (Sandbox Code Playgroud)
让你非常接近默认值smoothScatter()使用,但是通过限制y轴限制,可以实现nrpoints过滤代码在smoothScatter()函数中的大部分功能.