将geom_point()添加到geom_hex()

时间:2017-01-28 15:58:35

标签: r ggplot2

我在R中创建了一个hexbin数据图,其中颜色代表每个hexbin中的数据点数。我似乎有这个工作,如下面的MWE所示:

library(hexbin)
library(ggplot2)

set.seed(1)
data <- data.frame(A=rnorm(100), B=rnorm(100), C=rnorm(100), D=rnorm(100), E=rnorm(100))
maxVal = max(abs(data))
maxRange = c(-1*maxVal, maxVal)

x = data[,c("A")]
y = data[,c("E")]
h <- hexbin(x=x, y=y, xbins=5, shape=1, IDs=TRUE, xbnds=maxRange, ybnds=maxRange)
hexdf <- data.frame (hcell2xy (h),  hexID = h@cell, counts = h@count)

p <- ggplot(hexdf, aes(x=x, y=y, fill = counts, hexID=hexID)) + geom_hex(stat="identity") + coord_cartesian(xlim = c(maxRange[1], maxRange[2]), ylim = c(maxRange[1], maxRange[2]))

Resulting hexbin plot

我现在正试图在hexbin图的顶部以点的形式叠加原始数据的子集。我首先按如下方式创建原始数据的子集:

dat <- data[c(1:5),]

然后,我尝试将这五个数据点绘制到hexbin图上,p:

p + geom_point(data = dat, aes(x=A, y=B))

我收到错误:“eval中的错误(expr,envir,enclos):找不到对象'计数'”。我也尝试了以下内容:

p + geom_point() + geom_point(dat, aes(A, B))

我收到错误:“错误:ggplot2不知道如何处理class uneval的数据”。

我尝试了几个基于相似帖子的新想法 - 但总是会有错误而且没有结果。我想知道这种技术是否可行。如果有人有想法分享,我将非常感谢您的意见!

1 个答案:

答案 0 :(得分:1)

要解决此问题,我们需要在inherit.aes = FALSE电话中设置geom_point。基本上,您已在fill调用中将count美学设置为ggplot,因此当ggplot尝试将点添加到绘图中时,它会查找count中的datggplot告诉你,嘿,我在这个数据集中找不到count,所以我不能添加{{1}因为它错过了aes&#34;。

geom

enter image description here

或者,我们可以将p + geom_point(data = dat, aes(x=A, y=B), inherit.aes = FALSE) 定义为:

p

然后我们不需要p <- ggplot() + geom_hex(data = hexdf, aes(x=x, y=y, fill = counts), stat="identity") + coord_cartesian(xlim = c(maxRange[1], maxRange[2]), ylim = c(maxRange[1], maxRange[2]))

inhert.aes