stat_summary2d缺少已经提供的美学?

时间:2015-10-28 11:25:12

标签: r ggplot2

此代码可以正常工作:

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_bin2dstat_summary_hex更改为stat_summary_2d时,我收到以下错误:

  

geom_text需要以下缺失的美学:x,y

x = dat$xy = dat$y参数明确添加到aes不会改变任何内容。为什么stat_summary_hex没有查看列?

1 个答案:

答案 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")