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

如何在ggpubr中用facet实现子图对应不同Y变量

解决方案

要实现你要的分面小提琴图,核心是先把宽格式数据转成长格式,再用ggpubr的ggviolin结合facet.by参数生成子图,全程不需要直接调用ggplot2。具体步骤如下:

  1. 加载依赖包
    需要ggpubr绘图,tidyr处理数据格式:

    library(ggpubr)
    library(tidyr)
    
  2. 转换数据格式
    把数据框第2-19列的变量转为长格式,保留Status作为分组变量:

    long_data <- cesc_vs_hnsc_pos_vs_hnsc_neg %>%
      pivot_longer(cols = 2:19, names_to = "Variable", values_to = "Expression")
    

    这里Variable会存储原来第2-19列的列名,Expression对应各变量的数值。

  3. 绘制分面小提琴图
    用ggviolin直接生成带分面的图,参数设置贴合常见发表级图的样式:

    ggviolin(long_data,
             x = "Status",
             y = "Expression",
             fill = "Status",          # 按Status填充颜色
             palette = "npg",          # 可选调色板,比如"jco""aaas"等
             add = "boxplot",          # 叠加箱线图,更清晰展示统计量
             add.params = list(fill = "white"),
             facet.by = "Variable",    # 按Variable分面
             scales = "free_y",        # 每个子图Y轴独立适应范围
             ncol = 4,                 # 控制子图排列的列数,按需调整
             ggtheme = theme_pubr()) +
      theme(strip.text = element_text(size = 8),  # 调整子图标题大小
            legend.position = "bottom")           # 把图例移到底部
    

关键说明

  • 长格式转换是核心:宽格式数据无法直接用facet.by生成对应子图,必须转成“变量名-数值”的长格式才能让ggpubr识别分面逻辑。
  • scales="free_y"确保每个变量的Y轴范围匹配自身数据分布,避免因变量差异大导致部分子图信息丢失。
  • 叠加箱线图是学术图常用做法,能同时展示分布形态和中位数、四分位数等统计信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:27:45