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

如何在R中创建带均值标准差的分组点图及自定义X轴

ggplot2 实现分组散点图及自定义需求

以下是针对你提出的三个需求的完整实现方案,基于palmerpenguins数据集和ggplot2包:

1. 前置准备

首先加载所需包并清理数据(sex字段存在缺失值,需先移除):

library(ggplot2)
library(palmerpenguins)

# 清理含缺失值的行
penguins_clean <- penguins |> drop_na(sex)

2. 完整代码实现

ggplot(penguins_clean, aes(x = interaction(species, sex), y = body_mass_g)) +
  # 需求1:按sex分组绘制散点图(jitter避免点重叠)
  geom_jitter(aes(color = sex), width = 0.2, alpha = 0.6, size = 2) +
  
  # 需求2:为每个species添加均值和标准差统计量
  stat_summary(
    aes(group = species),
    fun.data = function(x) data.frame(
      y = mean(x),
      ymin = mean(x) - sd(x),
      ymax = mean(x) + sd(x)
    ),
    geom = "crossbar", width = 0.8, color = "#2c3e50", fill = "#ecf0f1", alpha = 0.4
  ) +
  
  # 需求3:自定义X轴,同时展示species与sex信息
  scale_x_discrete(
    labels = function(x) {
      # 将物种和性别拆分为两行显示
      strsplit(x, "\\.") |> 
        lapply(function(y) paste(y[1], y[2], sep = "\n")) |> 
        unlist()
    },
    name = "物种 & 性别"
  ) +
  
  # 美化配置
  scale_color_brewer(palette = "Set1") +
  labs(
    title = "企鹅体重分布:物种×性别分组",
    y = "体重 (g)",
    color = "性别"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 0, hjust = 0.5, size = 10),
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold")
  )

3. 关键需求说明

按sex分组绘制点图

  • 通过aes(color = sex)为不同性别的点分配颜色,直观区分分组
  • 使用geom_jitter替代普通散点图,通过width参数控制水平方向的分散程度,避免点重叠;alpha设置透明度,进一步优化重叠区域的可读性

添加物种级别的均值和标准差

  • 使用stat_summary自定义统计计算:通过匿名函数返回均值、均值-标准差、均值+标准差三个值
  • 指定group = species确保统计量是针对整个物种(而非物种-性别组合)计算的,用crossbar图形展示均值线和标准差范围

自定义X轴展示双信息

  • 用interaction(species, sex)创建物种与性别的组合变量作为X轴映射
  • 通过scale_x_discrete的labels参数,将组合变量的标签拆分为两行(物种在上,性别在下),实现X轴同时展示两类信息

可选调整

如果需要按物种-性别组合计算均值和标准差,只需将stat_summary中的group = species修改为group = interaction(species, sex)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:15:22