簡體   English   中英

帶有 R 的平均值的 2D 熱圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM