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

如何用R的ggplot按基因型分面绘制多Y轴变量对比图

问题描述

我是R语言新手,但有Matlab使用经验。希望针对动物模型的基因型(Control与Cre-)进行分面,在同一张图中对比Glom.Area、Glom.Tuft和Mesangial.Area这三个面积测量值的差异。以下是当前代码、数据集,期望效果为分面散点对比图(每个子图对应一个面积指标,x轴为基因型,y轴为面积值)。

当前代码

# Setup
library(tidyverse)
library(ggbeeswarm)
library(readxl)

# work space
setwd("C:/Users/k_nic/OneDrive/Desktop")

# Read in csv file
t1 <- read.csv("sample.csv", header = TRUE)

# plot for one varible
ggplot(t1, aes(x = Genotype, y= Glom.Area))

数据集

Genotype Sex Glom.Area Glom.Tuft Mesangial.Area
1   Control   M  6617.669  3804.877       1917.310
2   Control   M  7986.696  5377.977       2761.949
3   Control   M  8617.410  4443.345       2335.244
4   Control   M  7785.355  4307.021       2381.512
5   Control   M  9159.720  5568.449       3163.232
6   Control   M  8484.327  5314.041       3238.861
7   Control   M 10315.521  6105.294       3429.906
8   Control   M  5517.161  3090.970       1878.288
9      Cre-   M  6075.166  3438.421       2147.758
10     Cre-   M  8947.698  5809.953       3744.117
11     Cre-   M  6677.471  4315.344       2113.502
12     Cre-   M  7616.932  4293.291       2763.791
13     Cre-   M  8191.464  4778.529       2159.007
14     Cre-   M  8549.339  6043.961       2922.295
15     Cre-   M 11057.196  6546.740       3771.891
16     Cre-   M  5911.768  3382.556       1754.674

解决方案

要做出你想要的分面对比图,核心是先把数据从宽格式转成长格式(ggplot2对长格式数据支持更友好),再结合蜂群散点、分面功能实现:

1. 转换数据格式

用pivot_longer()把三个面积指标列合并成两列:一列存指标名称,一列存对应数值,这样就能统一处理所有指标:

# 转成长格式数据
t1_long <- t1 %>%
  pivot_longer(
    cols = c(Glom.Area, Glom.Tuft, Mesangial.Area),
    names_to = "面积指标",
    values_to = "面积数值"
  )

2. 绘制分面图

基于转换后的数据,用geom_beeswarm()绘制不重叠的散点,搭配分面功能即可得到目标效果:

ggplot(t1_long, aes(x = Genotype, y = 面积数值, color = Genotype)) +
  # 蜂群散点,避免同组数据点重叠
  geom_beeswarm(size = 2, alpha = 0.8) +
  # 可选:添加箱线图展示分布轮廓,outlier.shape=NA避免和散点重复
  geom_boxplot(width = 0.3, alpha = 0.2, outlier.shape = NA) +
  # 按面积指标分面,ncol=1为纵向排列,改成3可横向排列
  facet_wrap(~`面积指标`, ncol = 1) +
  # 设置坐标轴标签和标题
  labs(x = "基因型", y = "面积值", title = "不同基因型的肾相关面积指标对比") +
  # 使用简洁主题,也可替换为其他theme样式
  theme_bw() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 12),
    strip.text = element_text(size = 10),
    axis.text = element_text(size = 9)
  )

补充说明

  • 若不需要箱线图,直接删除geom_boxplot()代码行即可;
  • 如需添加组间显著性标记,可安装ggsignif包,用geom_signif()实现;
  • 分面排列方式可通过facet_wrap()的ncol/nrow参数调整,比如ncol=3让三个子图横向并排。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:50:13