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

R ggplot2分面散点图按象限展示均值中位数等统计量的实现问题

实现方案

现有ggpubr、ggpp包的内置统计层不支持按象限拆分计算统计值,我们可以通过提前给数据打象限标签+预计算分面-象限维度统计值的方式实现需求,全程兼容ggplot2的分面逻辑,灵活支持任意统计指标的输出。

完整可运行代码如下:

library(ggplot2)
library(ggpp)
library(dplyr)
library(glue)

# 设定象限分割阈值
x_thresh <- 3
y_thresh <- 9

# 原始数据
data <- data.frame(
  xlabel = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
  ylabel = c(10, 12, 14, 16, 18, 6, 5, 4, 3, 2),
  facets = c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b")
)

# 步骤1:给每个点打象限标签
data$quadrant <- case_when(
  data$xlabel > x_thresh & data$ylabel > y_thresh ~ "象限1",
  data$xlabel <= x_thresh & data$ylabel > y_thresh ~ "象限2",
  data$xlabel <= x_thresh & data$ylabel <= y_thresh ~ "象限3",
  data$xlabel > x_thresh & data$ylabel <= y_thresh ~ "象限4"
)

# 步骤2:按分面+象限分组计算所需统计指标
stats <- data %>%
  group_by(facets, quadrant) %>%
  summarise(
    count = n(),
    x_mean = mean(xlabel, na.rm = T),
    y_mean = mean(ylabel, na.rm = T),
    x_median = median(xlabel, na.rm = T),
    y_median = median(ylabel, na.rm = T),
    # 此处可按需添加相关系数、分位数等其他指标
    .groups = "drop"
  )

# 步骤3:给统计值指定每个象限的标注位置,避免遮挡
stats <- stats %>%
  mutate(
    label_x = case_when(
      quadrant %in% c("象限1", "象限4") ~ x_thresh + diff(range(data$xlabel))*0.1,
      quadrant %in% c("象限2", "象限3") ~ x_thresh - diff(range(data$xlabel))*0.1
    ),
    label_y = case_when(
      quadrant %in% c("象限1", "象限2") ~ y_thresh + diff(range(data$ylabel))*0.1,
      quadrant %in% c("象限3", "象限4") ~ y_thresh - diff(range(data$ylabel))*0.1
    ),
    # 拼接要展示的文本
    label_text = glue("点数:{count}\nx均值:{round(x_mean,1)}\ny均值:{round(y_mean,1)}\nx中位数:{x_median}\ny中位数:{y_median}")
  )

# 绘图
ggplot(data = data, aes(x = xlabel, y = ylabel, color = facets)) +
  geom_point() +
  facet_wrap(facets ~ .) +
  geom_quadrant_lines(xintercept = x_thresh, yintercept = y_thresh) +
  # 加载预计算的统计值标注
  geom_text(data = stats, aes(x = label_x, y = label_y, label = label_text),
            color = "black", size = 3, hjust = "inward", vjust = "inward")

可根据需求灵活调整:

  • 统计计算环节可自定义添加任意需要的指标
  • 调整label_x、label_y的偏移规则,适配不同的数据范围和标注展示需求
  • 不需要展示空象限标注时,直接过滤统计值中count=0的行即可

内容的提问来源于stack exchange,提问作者K.RAC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:03