使用 R 的平均值的二维热图

2D heatmap of mean values with R

我正在尝试绘制类似这样的图,其中 alpha 旨在成为每个 bin 的 dat$c 的平均值:

library(ggplot2)

set.seed(1)

dat <- data.frame(a = rnorm(1000), b = rnorm(1000), c = 1/rnorm(1000),
  d = as.factor(sample(c(0, 1), 1000, replace=TRUE)))

# plot
p <- ggplot(dat, environment = environment()) +
  geom_bin2d(aes(x=a, y=b, alpha=c, fill=d),
  binwidth = c(1.0/10, 1.0/10))

但 alpha 看起来不正确。请帮助

我不确定您希望看到什么,但这会在每个 bin 中计算 mean(dat$c) 并绘制结果。

library(ggplot2)
brks <- seq(-5,5,0.1)
lbls <- brks[-1]-0.05
gg.df <- aggregate(c~cut(a, brks, lbls)+cut(b,brks, lbls)+d,dat,FUN=mean)
names(gg.df)[1:2] <- c("a","b")
gg.df$a <- as.numeric(as.character(gg.df$a))
gg.df$b <- as.numeric(as.character(gg.df$b))
ggplot(gg.df, aes(x=a, y=b, alpha=c, fill=d)) + geom_raster() + coord_fixed()

编辑: 对 OP 评论的回应。

你可以试试:

dat$c <- with(dat,1/(a^2+b^2))

这使得 dat$c 与半径(从 (0,0) 到点的距离)成反比。现在 运行 与上面相同的代码:

gg.df <- aggregate(c~cut(a, brks, lbls)+cut(b,brks, lbls)+d,dat,FUN=mean)
names(gg.df)[1:2] <- c("a","b")
gg.df$a <- as.numeric(as.character(gg.df$a))
gg.df$b <- as.numeric(as.character(gg.df$b))
ggplot(gg.df, aes(x=a, y=b, alpha=c, fill=d)) + geom_raster() + coord_fixed() +
  scale_alpha_continuous(trans="log",breaks=10^(0:3))

如预期的那样生成:一个地块的地块靠近中心 alpha(透明度较低)。

我需要为 alpha 使用对数刻度,因为数值范围超过几个数量级。