我有一大组数据,其中包含坐标 (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)
.
欢迎任何有关如何使用我提出的方法或替代方法来完成此任务的提示。