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

如何在R中绘制多变量同图条形图:按患者ID分组展示4类细胞计数

R语言分组并列条形图实现方案

方案选择建议

优先直接绘制合并的分组条形图,展示逻辑更直观,也不需要额外处理多图拼接的对齐问题。仅当4类细胞计数的数值量级相差超过100倍、无法在同一Y轴刻度下清晰展示所有指标时,再考虑分面或多图拼接。

分步操作指导

1. 数据格式预处理

你需要先将宽格式的原始数据集转换为长格式,这是ggplot绘制分组图的核心前提,基础绘图也可以基于转换后的数据快速生成矩阵。

假设你的原始宽表结构如下:

PatientID总细胞计数1区细胞计数2区细胞计数3区细胞计数
P011200320480400
P02950250350350
P031400400500500

转换为长表的代码:

# 加载所需包
library(tidyr)
library(ggplot2)

# 转换为长表:将4个计数列合并为2列,一列存指标名称,一列存对应的计数值
df_long <- pivot_longer(
  data = 你的原始数据集名, # 替换为你自己的数据集变量名
  cols = -PatientID, # 除了PatientID外,其他列都参与转换
  names_to = "指标类型", # 新生成的列,存储原来的列名(总细胞/1区等)
  values_to = "细胞计数" # 新生成的列,存储对应的数值
)

2. ggplot2绘制分组并列条形图(推荐)

核心参数为position = "dodge",可实现同一PatientID下多根条形并列展示:

ggplot(data = df_long, aes(x = PatientID, y = 细胞计数, fill = 指标类型)) +
  # stat="identity"表示直接使用y列的原始值作为条形高度
  # position="dodge"表示并列排布,可改为position_dodge(0.8)调整柱子间距
  geom_bar(stat = "identity", position = "dodge", width = 0.7) +
  # 自定义标签
  labs(x = "患者ID", y = "细胞计数", fill = "计数类别") +
  # 调整x轴标签角度,避免患者ID重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

3. 基础barplot函数绘制分组并列条形图

如果习惯用基础绘图函数,可基于原始宽表直接生成矩阵后绘图:

# 提取4个计数列转为矩阵,行对应4类指标,列对应患者
count_matrix <- t(as.matrix(你的原始数据集名[, c("总细胞计数", "1区细胞计数", "2区细胞计数", "3区细胞计数")]))
# beside=TRUE是并列排布的核心参数,默认FALSE为堆叠
barplot(count_matrix, 
        beside = TRUE, 
        names.arg = 你的原始数据集名$PatientID, # x轴标签为患者ID
        col = c("darkblue", "red", "green", "orange"), # 自定义4类指标的颜色
        xlab = "患者ID",
        ylab = "细胞计数")
# 添加图例
legend("topright", 
       legend = c("总细胞计数", "1区细胞计数", "2区细胞计数", "3区细胞计数"),
       fill = c("darkblue", "red", "green", "orange"))

特殊场景方案:分面展示(数值差异过大时使用)

如果4类指标数值差距极大,比如总细胞计数是105级别,分区计数只有102级别,同一Y轴下分区的条形会几乎不可见,此时可以用分面替代手动拼接4张图:

ggplot(data = df_long, aes(x = PatientID, y = 细胞计数, fill = 指标类型)) +
  geom_bar(stat = "identity", show.legend = FALSE) +
  # 按指标类型分面,每个面使用独立的Y轴刻度
  facet_wrap(~指标类型, nrow = 1, scales = "free_y") +
  labs(x = "患者ID", y = "细胞计数") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:18:04