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

如何使用geom_point为数据列内不同分组设置差异化点形状

ggplot2中geom_point按分组自定义点形状实现方法

核心是将分组列映射到shape美学属性,再通过scale_shape_manual()精确指定每个分组对应的点形状,可完全自定义A组方形、B组三角形这类匹配需求。

1. 前置准备:加载依赖包、构造示例数据

library(ggplot2)
# 匹配提供的示例数据集
df <- data.frame(
  Treatment = rep(c("A", "B", "C"), 2),
  `Time period` = rep(c("一阶段(One)", "二阶段(Two)"), each = 3),
  `No. of blooms` = c(67, 137, 32, 118, 212, 18),
  check.names = FALSE
)

2. 快速实现(自动分配不同形状)

如果不需要严格指定组和形状的对应关系,只需要不同组形状有区分,直接在aes()中将分组列映射到shape参数即可:

ggplot(df, aes(x = `Time period`, y = `No. of blooms`, shape = Treatment)) +
  geom_point(size = 3)

注意:ggplot2默认的离散形状标度最多支持6个分组,分组数超过6时必须手动指定形状。

3. 自定义每组对应形状(精确匹配需求)

使用scale_shape_manual()传入命名向量,即可给每个分组指定专属形状,R内置常用点形状对应数值:

  • 15:实心方形
  • 17:实心上三角形
  • 19:实心圆形
  • 18:实心菱形
  • 0-2:对应方形、圆形、三角形的空心版本
    示例代码(实现A组方形、B组三角形、C组圆形的效果):
ggplot(df, aes(x = `Time period`, y = `No. of blooms`, shape = Treatment)) +
  geom_point(size = 4) +
  scale_shape_manual(
    # 核心:指定分组和形状的映射关系
    values = c(
      "A" = 15,
      "B" = 17,
      "C" = 19
    ),
    # 可选:自定义图例显示文本
    name = "处理组",
    labels = c("A处理组", "B处理组", "C处理组")
  ) +
  # 可选:优化图表标签和主题
  labs(
    x = "时间周期",
    y = "开花数量"
  ) +
  theme_classic()

如果你同时给点映射了颜色(color)、填充(fill)属性,只需要保证分组列一致,形状、颜色的图例会自动合并,不需要额外调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:09:17