0

我有一大组数据,其中包含坐标 (x,y) 和一个类似于密度的数字 z 值。我有兴趣对数据进行分箱、执行汇总统计(中位数、长度等)并将分箱值绘制为点,并将统计数据映射到 ggplot 美学。

我尝试使用 stat_summary2d 并手动提取结果(基于此答案:https ://stackoverflow.com/a/22013347/2832911 )。但是,我遇到的问题是 bin 位置基于数据范围,在我的情况下,数据范围因数据集而异。因此,在两个地块之间,箱不覆盖相同的区域。

我的问题是如何使用 stat_summary2d 手动设置 bin,或者至少将它们设置为一致,而不管数据如何。

这是一个基本示例,它演示了该方法以及垃圾箱如何不对齐:

library(ggplot2)
set.seed(2)
df1 <- data.frame(x=runif(100, -1,1), y=runif(100, -1,1), z=rnorm(100))
df2 <- data.frame(x=runif(100, -1,1), y=runif(100, -1,1), z=rnorm(100))
g1 <- ggplot(df1, aes(x,y))+stat_summary2d(fun=mean, bins=10, aes(z=z))+geom_point()
df1.binned <-
    data.frame(with(ggplot_build(g1)$data[[1]],
                    cbind(x=(xmax+xmin)/2, y=(ymax+ymin)/2, z=value, df=1)))
g2 <- ggplot(df2, aes(x,y))+stat_summary2d(fun=mean, bins=10, aes(z=z))+geom_point()
df2.binned <-
    data.frame(with(ggplot_build(g2)$data[[1]],
                    cbind(x=(xmax+xmin)/2, y=(ymax+ymin)/2, z=value, df=2)))
df.binned <- rbind(df1.binned, df2.binned)
ggplot(df.binned, aes(x,y, size=z, color=factor(df)))+geom_point(alpha=.5)

产生这个图片

实际上,我将多次使用 stat_summary2d 来获取例如 bin 中的点数和中位数,然后使用aes(size=bin.length, colour=bin.median).

欢迎任何有关如何使用我提出的方法或替代方法来完成此任务的提示。

4

1 回答 1

1

您可以使用 手动设置中断stat_summary2d。如果你想要从 -1 到 1 的 10 个级别,你可以这样做

bb<-seq(-1,1,length.out=10+1)
breaks<-list(x=bb, y=bb)

然后breaks在调用绘图时使用变量

g1 <- ggplot(df1, aes(x,y))+
    stat_summary2d(fun=mean, breaks=breaks, aes(z=z))+
    geom_point()

很遗憾,您无法将“点”更改geomstat_summary2d“点”,因此您可以一次性完成,但看起来并没有为此stat_summary2d计算正确的xy

于 2014-05-28T18:28:25.477 回答