我在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]))
我现在正试图在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的数据”。
我尝试了几个基于相似帖子的新想法 - 但总是会有错误而且没有结果。我想知道这种技术是否可行。如果有人有想法分享,我将非常感谢您的意见!
答案 0 :(得分:1)
要解决此问题,我们需要在inherit.aes = FALSE
电话中设置geom_point
。基本上,您已在fill
调用中将count
美学设置为ggplot
,因此当ggplot
尝试将点添加到绘图中时,它会查找count
中的dat
。 ggplot
告诉你,嘿,我在这个数据集中找不到count
,所以我不能添加{{1}因为它错过了aes&#34;。
geom
或者,我们可以将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