【问题标题】:making binned scatter plots for two variables in ggplot2 in R在 R 中为 ggplot2 中的两个变量制作分箱散点图
【发布时间】:2026-01-08 19:40:01
【问题描述】:

我有一个包含两列 xy 的数据框,每列都包含 0 到 100 之间的值(数据是成对的)。我想使用分箱散点图将它们相互关联。如果我要使用常规散点图,这很容易做到:

geom_point(aes(x=x, y=y))

但我想将这些点放入从 0 到 100 的 N 个 bin 中,得到每个 bin 中 x 的平均值和该 bin 中点的 y 的平均值,并显示作为散点图 - 所以关联分箱平均值而不是原始数据点。

在 ggplot2 中是否有一种聪明/快速的方法来做到这一点,使用 geom_smooth()geom_point 的某种组合?还是必须手动预先计算然后绘制?

【问题讨论】:

    标签: r plot ggplot2


    【解决方案1】:

    是的,您可以使用stat_summary_bin

    set.seed(42)
    x <- runif(1e4)
    y <- x^2 + x + 4 * rnorm(1e4)
    df <- data.frame(x=x, y=y)
    
    library(ggplot2)
    (ggplot(df, aes(x=x,y=y)) +
      geom_point(alpha = 0.4) +
      stat_summary_bin(fun.y='mean', bins=20,
                       color='orange', size=2, geom='point'))
    

    【讨论】:

      【解决方案2】:

      我建议geom_bin2d

      DF <- data.frame(x=1:100,y=1:100+rnorm(100))
      
      library(ggplot2)
      p <- ggplot(DF,aes(x=x,y=y)) + geom_bin2d()
      print(p)
      

      【讨论】: