我用
geom_raster
制作了热图,如下所示:
mround <- function(x,base){base*round(x/base)} # round to nearest 5
df <- data.frame(x= mround(rnorm(10000, 100, 10), 5),
y= mround(rnorm(10000, 100, 10), 5))
df$z <- df$x + df$y
library(ggplot2)
ggplot(df) +
geom_raster(aes(x= x, y= y, fill= z)) +
theme_classic()
我想为栅格设置
alpha
参数,它应该取决于二元密度。我们可以像这样可视化栅格的双变量密度:
ggplot() +
stat_density_2d(data= df, aes(x= x, y= y, alpha = after_stat(density)), geom = "raster", contour= FALSE)
基本上,我希望第一个图具有第二个图的
alpha
。我尝试了各种方法,比如geom_raster(aes(x= x, y= y, fill= z, alpha = after_stat(density)))
,但到目前为止没有任何效果。如何同时通过 fill
和 z
通过 2d 密度设置 alpha
?
这很困难,因为为了计算密度,ggplot 必须聚合数据,这会丢失每个唯一点的 z 值。一种选择是仅预先计算密度:
n <- 1 + diff(ranges)/5
dens <- MASS::kde2d(df$x, df$y, n = n, lims = c(ranges, ranges))
cbind(expand.grid(x = dens$x, y = dens$y),
dens = c(dens$z), z = dens$x + dens$y) |>
ggplot(aes(x, y)) +
geom_tile(aes(fill = z, alpha = dens)) +
theme_classic() +
scale_alpha_continuous(range = c(0, 1)) +
coord_equal()