此代码可以正常工作:
library(ggplot2)
dat <- data.frame(x = rnorm(100000, 0, 5), y = rnorm(100000, 0, 5), z = rnorm(100000, 42, 42))
hexHist = ggplot(dat, aes(x, y, z = z)) +
stat_binhex(bins = 10) +
stat_summary_hex(aes(label=..value..), bins = 10,
fun = function(z) {
(round(sum(z)/length(z), 0))
},
geom = "text")
但是,当我将stat_binhex
更改为stat_bin2d
而stat_summary_hex
更改为stat_summary_2d
时,我收到以下错误:
geom_text
需要以下缺失的美学:x,y
将x = dat$x
和y = dat$y
参数明确添加到aes
不会改变任何内容。为什么stat_summary_hex
没有查看列?
答案 0 :(得分:2)
参考此question,您的问题没有开箱即用的解决方案,因为stat_bin2d经过优化可以使用 geom_rect - 它返回xmin,xmax,ymin和ymax美学,而不是x 和geom_text需要的美学。
但是可以应用解决方法,我使用了data.table
包。
library(ggplot2)
dat <- data.frame(x = rnorm(100000, 0, 5), y = rnorm(100000, 0, 5), z = rnorm(100000, 42, 42))
hexHist = ggplot(dat, aes(x, y, z = z)) +
stat_bin2d(bins = 10)
dat = data.table(dat)
newdat <- data.table(ggplot_build(hexHist)$data[[1]])
newdat[,xmean := (xmin + xmax)/2]
newdat[,ymean := (ymin + ymax)/2]
newdat[,z:=round(sum(dat[x>xmin & x<xmax & y > ymin & y<ymax]$z)/length(dat[x>xmin & x<xmax & y > ymin & y<ymax]$z)) ,by=c('xmean','ymean')]
hexHist + geom_text(data=newdat, aes(xmean, ymean, label=z), col="white")