You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R的ggplot2网格分面中为子组添加均值汇总点

解决方案

要在每个分面单元格中添加对应分组(按cyl)的双轴均值点,你需要显式指定stat_summary的分组依据,覆盖默认的按x轴变量分组的行为,同时自定义函数计算mpg和disp的均值。以下是符合需求的代码:

library(ggplot2)
data(mtcars)

ggplot(mtcars, aes(x = mpg, y = disp, color = factor(cyl))) + 
  geom_point() + 
  facet_grid(vs ~ am) +
  stat_summary(
    # 指定分组:按分面变量(vs、am) + cyl分组,确保每个分面每个cyl组计算整体均值
    aes(group = interaction(vs, am, cyl)),
    geom = "point",
    # 自定义函数返回每个分组的mpg和disp均值
    fun.data = function(df) data.frame(
      x = mean(df$mpg),
      y = mean(df$disp),
      ymin = mean(df$disp),
      ymax = mean(df$disp) # 满足stat_summary的参数要求,无实际意义
    ),
    size = 3,
    shape = 24,
    fill = "red"
  )

关键说明

  1. 分组控制:通过group = interaction(vs, am, cyl)强制按分面的两个定性变量和cyl分组,避免默认按mpg的单个取值分组。
  2. 双轴均值计算:使用fun.data自定义函数,同时计算每个分组的mpg(x轴)和disp(y轴)均值,返回包含x、y的数据框。
  3. 颜色映射:继承主图层的color = factor(cyl)设置,不同cyl的均值点会显示对应颜色,符合你“按颜色分别显示均值”的需求。

如果需要每个分面单元格的整体均值(不按cyl分组),只需将group改为interaction(vs, am),并固定均值点颜色:

ggplot(mtcars, aes(x = mpg, y = disp, color = factor(cyl))) + 
  geom_point() + 
  facet_grid(vs ~ am) +
  stat_summary(
    aes(group = interaction(vs, am)),
    geom = "point",
    fun.data = function(df) data.frame(
      x = mean(df$mpg),
      y = mean(df$disp),
      ymin = mean(df$disp),
      ymax = mean(df$disp)
    ),
    size = 3,
    shape = 24,
    fill = "red",
    color = "black"
  )

内容的提问来源于stack exchange,提问作者kwadratens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:40:18