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)有没有办法将箱子集中在点上?有时左下角是点,有时是右下角,等等,像这样:就像在这里

此外,如果盒子足够大以相互接触,那将是理想的,但是当我更改binwidth=c(1,1)in 时stat_bin2d(),它实际上会更改计数,尽管 bin 不应该重叠,因为所有点都彼此相距至少 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 不允许我为每个单独的点设置大小?,但无法使其工作。

感谢期待任何帮助。

4

2 回答 2

6

ggplot2 2.0.0 版引入了geom_count()来精确地做到这一点。使用您的数据:

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

产量: geom_count 图表

于 2016-06-27T14:24:03.657 回答
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))

在此处输入图像描述

于 2013-06-24T15:49:37.293 回答