[英]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
使用對數刻度,因為值的范圍超過幾個數量級。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.