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

如何用R的ggplot2绘制含子分类的分组散点图与箱线图

在ggplot2中绘制带子分类的分组散点图

没问题,我来帮你搞定这个需求!ggplot2对长格式数据更友好,所以我们先把你的宽格式数据转换成适合绘图的长格式,再一步步实现带子分类的分组散点图,还能加上均值线段来匹配你想要的样式。

步骤1:数据格式转换

首先我们需要把宽格式数据转成长格式,同时提取出主分组(比如BL_CA、CA_BL、BL6、CA)和每个分组内的重复编号(1/2/3),还要保留你的Category子分类信息。我们用tidyverse工具包来完成这个操作:

# 加载所需工具包
library(tidyverse)

# 假设你的原始数据框名为df,先把行名转为单独的列(如果你的数据第一列是样本名的话)
df <- df %>%
  rownames_to_column(var = "Sample")

# 转换为长格式,提取主分组和重复项
df_long <- df %>%
  pivot_longer(
    cols = -c(Sample, Category),  # 排除样本名和子分类列,其他列转为长格式
    names_to = "Group",
    values_to = "Value"
  ) %>%
  mutate(
    # 从列名中提取主分组(比如从BL_CA_1中提取BL_CA)
    Main_Group = str_extract(Group, "^[A-Z0-9_]+(?=_\\d)"),
    # 提取每个主分组内的重复编号(1/2/3)
    Sub_Repeat = str_extract(Group, "\\d+$")
  )

步骤2:绘制带子分类的分组散点图

现在我们可以用ggplot2来绘图了,核心是把Main_Group作为x轴,Value作为y轴,用color映射你的子分类Category,再通过位置调整让同一分组内的子分类点不重叠,同时加上均值线段:

ggplot(df_long, aes(x = Main_Group, y = Value, color = Category)) +
  # 绘制散点:用position_jitterdodge让子分类分开,重复点轻微抖动避免重叠
  geom_point(
    position = position_jitterdodge(
      jitter.width = 0.2,  # 点的抖动宽度
      dodge.width = 0.6    # 子分类之间的分隔宽度
    ),
    alpha = 0.7,  # 点的透明度,避免重叠时太杂乱
    size = 2
  ) +
  # 绘制每个子分类的均值线段,清晰展示中心趋势
  stat_summary(
    fun = mean,
    geom = "crossbar",
    position = position_dodge(width = 0.6),  # 和散点的dodge宽度匹配
    width = 0.5,
    color = "black",
    linewidth = 0.5,
    fill = NA
  ) +
  # 调整标签和主题
  labs(
    x = "主分组",
    y = "数值",
    color = "子分类"
  ) +
  theme_bw() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),  # x轴标签倾斜,避免重叠
    legend.position = "top"
  )

代码解释

  • position_jitterdodge:这个参数是关键,它同时实现了两个效果——让同一主分组内不同子分类的点左右分开(dodge),让每个子分类内的重复点轻微上下抖动(jitter),完美解决点重叠的问题。
  • stat_summary:用来计算并绘制每个子分类的均值横线,让读者能快速看到每个组内子分类的中心值,和你提供的示例图样式一致。
  • 主题调整:theme_bw()提供清爽的白色背景,倾斜x轴标签避免长分组名重叠。

这样你就能得到和示例图类似的、带子分类的分组散点图啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:28:04