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

如何在ggplot2绘制的象限图各象限中添加数据计数?

象限图添加象限标识与数据计数的实现方案

实现步骤与完整代码

先给数据标记象限,统计每个象限的样本量,最后在图表上添加对应的标识和计数:

library(dplyr)
library(ggplot2)

# 计算坐标轴中点(简化写法)
x_mid <- mean(range(iris$Petal.Length, na.rm = TRUE))
y_mid <- mean(range(iris$Petal.Width, na.rm = TRUE))

# 预处理:标记象限 + 统计每个象限的计数与文本位置
quad_info <- iris %>% 
  mutate(quadrant = case_when(
    Petal.Length > x_mid & Petal.Width > y_mid   ~ "Q1",
    Petal.Length <= x_mid & Petal.Width > y_mid  ~ "Q2",
    Petal.Length <= x_mid & Petal.Width <= y_mid ~ "Q3",
    TRUE                                         ~ "Q4"
  )) %>% 
  group_by(quadrant) %>% 
  summarize(
    样本量 = n(),
    # 计算每个象限的文本放置中心
    x_center = ifelse(quadrant %in% c("Q1", "Q4"), mean(c(max(Petal.Length), x_mid)), mean(c(min(Petal.Length), x_mid))),
    y_center = ifelse(quadrant %in% c("Q1", "Q2"), mean(c(max(Petal.Width), y_mid)), mean(c(min(Petal.Width), y_mid)))
  )

# 绘制图表并添加标识
iris %>% 
  mutate(quadrant = case_when(
    Petal.Length > x_mid & Petal.Width > y_mid   ~ "Q1",
    Petal.Length <= x_mid & Petal.Width > y_mid  ~ "Q2",
    Petal.Length <= x_mid & Petal.Width <= y_mid ~ "Q3",
    TRUE                                         ~ "Q4"
  )) %>% 
  ggplot(aes(x = Petal.Length, y = Petal.Width, color = quadrant)) +
  geom_vline(xintercept = x_mid) +
  geom_hline(yintercept = y_mid) +
  geom_point() +
  # 添加象限名和样本量(合并显示)
  geom_text(data = quad_info, aes(x = x_center, y = y_center, label = paste0(quadrant, "\n样本量: ", 样本量), color = quadrant),
            size = 5, fontface = "bold") +
  theme_minimal()

关键说明

  • 中点计算:用range()函数直接获取数据的最大最小值,简化代码逻辑。
  • 文本位置:通过判断象限,计算每个象限的中心坐标,确保标识放在象限的显眼位置,不会被数据点遮挡。
  • 灵活调整:如果需要分开显示象限名和计数,可以拆分两个geom_text,调整y坐标让它们上下排列,比如计数放在象限名下方0.1个单位的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:10:24