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

如何绘制带facet_grid式标签且Y轴独立的facet_wrap图?

问题:同时实现facet_wrap的独立Y轴与facet_grid的共享标签布局

我有基因表达TPM值矩阵,包含2种细胞系、分组类型(实验组VS对照组),想要比较每个基因在两种细胞系中KD与对照组的TPM差异,需求如下:

  • 两种细胞系的同基因子图平行展示
  • 每个子图拥有独立Y轴(对应facet_wrap(scales="free_y")的效果)
  • 标签布局像facet_grid那样共享,避免每个子图重复显示细胞系和基因名

当前尝试的两种方案各有缺陷:

  • 用facet_wrap能实现独立Y轴,但每个子图都会重复显示细胞系和基因标签
  • 用facet_grid能实现共享标签,但scales="free_y"仅支持整列共享Y轴,无法让每个子图的Y轴完全独立

目标是绘制出兼具两种方案优势的图形。


解决方案:使用ggh4x包的facet_grid2函数

ggh4x包扩展了ggplot2的分面功能,其中facet_grid2可以同时实现每个子图独立Y轴和facet_grid式的共享标签布局,核心是通过independent = "y"参数实现完全独立的Y轴。

步骤1:安装并加载依赖包

# 首次使用需安装
install.packages("ggh4x")
library(ggh4x)
library(ggplot2)

步骤2:绘图代码

t3 <- ggplot(TPM_matrix, aes(x = Type, y = log10(TPM_value), color = Type)) +
  geom_point() +
  ggtitle("TPM levels") +
  # 关键:用facet_grid2实现独立Y轴+共享标签
  facet_grid2(Cell_Line ~ gene_name, scales = "free_y", independent = "y") +
  theme(
    strip.background = element_blank(),
    strip.text.y = element_text(size = 12, face = 'bold'),
    strip.text.x = element_text(size = 12, face = 'bold'),
    axis.text.x = element_blank(),
    legend.position = 'right',
    legend.title = element_text(size = 13),
    legend.text = element_text(size = 13),
    plot.title = element_text(color = "black", hjust = 0.5, vjust = 1, size = 20, face = 'bold')
  )
print(t3)

参数说明

  • scales = "free_y":允许Y轴刻度自由变化
  • independent = "y":让每个子图的Y轴完全独立(而非整列共享),这是实现需求的核心参数
  • 保留了facet_grid的标签布局,细胞系标签仅在每行左侧显示一次,基因名标签仅在每列顶部显示一次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:32:24