使用ggplot2可视化叠加的点数:使用stat_bin2d、geom_tile或调整点大小?

3

我的问题很简单:我有一些带有x、y坐标的点,这些点位于由1x1正方形组成的矩形网格内。这些点具有平均坐标,因此多个点具有相同的坐标(它们完全重叠)。可重现的示例:

# generate fake data
y <- seq(from=0.5, to=9.5, by=1)
x <- seq(from=0.5, to=4.5, by=1)
xnew <- sample(x,100,replace=T)
ynew <- sample(y,100,replace=T)
data <- data.frame(xnew,ynew)

# create chart
ggplot(data, aes(x=xnew, y=ynew)) + geom_point()

我想要表现一个特定位置(x,y坐标,表示一个特定的正方形)的点的频率。stat_bin2d是朝着正确方向迈出的一步,但是我无法理解为什么这些箱子会在地图上不同的位置,这使得在视觉上难以看出分布。 我可以想象两种不同的解决方案:
1)有没有办法将箱子居中放置在点上? 有时左下角在点上,有时右下角等等,就像这样:as in here 此外,最好的情况是箱子足够大且彼此接触,但是当我在stat_bin2d()中更改binwidth=c(1,1)时,实际上会更改计数,尽管箱子不应重叠,因为所有点之间至少相距1个正方形。
或者,使用点大小:
2)我更喜欢点的大小反映浓度(这种方式在黑白色上也更好)。我试过用geom_point():
ggplot(data, aes(x=xnew, y=ynew))+geom_point(aes(x=xnew,y=ynew, size=..count..))

但是我得到了

Error in eval(expr, envir, enclos) : object 'count' not found

然后,如果我添加`stat="bin"`,它会与对y的赋值冲突。我在这里查看:为什么ggplot2不允许我为每个单独点设置大小?,但是无法使其正常工作。
感谢您提前的任何帮助。
2个回答

6

ggplot2 2.0.0版本引入了geom_count()用于精确计数。使用您的数据:

ggplot(data, aes(x=xnew,y=ynew)) +
  geom_count()

产量: geom_count 图表

5
data2 <- aggregate(data$x,by=list(x=data$x,y=data$y),length)
names(data2)[3] <- "count"


ggplot(data2, aes(x=x,y=y)) + geom_point(aes(size=count))

enter image description here


太好了,@Roland,谢谢!这解决了点问题。如果有人有其他想法,我还是想知道另一种方法。 - radu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接