【问题标题】:Manually specifying bins with stat_summary2d使用 stat_summary2d 手动指定 bin
【发布时间】:2014-05-28 17:02:20
【问题描述】:

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

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

【问题讨论】:

    标签: r ggplot2 binning


    【解决方案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()
    

    很遗憾,您不能将 stat_summary2dgeom 更改为“点”,因此您可以一次性完成,但看起来 stat_summary2d 无法计算出正确的 xy 的值。

    【讨论】:

    • 这对我来说效果很好。不知何故,我错过了你可以直接指定休息时间。
    • 如果 x 和 y 是因子类型,您知道如何调整它吗?我收到了Error : all(sapply(breaks, is.numeric)) is not TRUE 你的解决方案。
    • 我想通了:如果xy是因子变量,但可以直接转换为数字(如“1”,“2”......),只需使用@987654334 @ 而不是 bb。否则,它们可以映射到整数 ID(请参阅 stackoverflow.com/a/13566768/1498405)。
    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多