使用stat_summary2d手动指定bin

时间:2014-05-28 17:02:20

标签: r ggplot2 binning

我有一大组数据,包括坐标(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)

生成this image

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

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

1 个答案:

答案 0 :(得分: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()

遗憾的是,您无法将geom的{​​{1}}更改为&#34;点&#34;所以你可以一次性做到这一点,但看起来并不像stat_summary2d计算出适当的stat_summary2dx值。