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

如何使用ggplot为单值dataframe的每列基因绘制同图箱线图

R基于ggplot绘制多基因箱线图的优雅实现

ggplot的语法设计原生适配长表结构,宽表转长表是最标准的实现路径,配合管道操作可以做到全程无冗余中间变量,代码非常简洁。

1. 示例数据构造(可直接替换为你的实际数据)

# 匹配你给出的DataFrame结构:行名为样本名,列名为基因名
df <- data.frame(
  row.names = c("S1", "S2", "S3", "S4"),
  G1 = c(0.19021657, 0.431098317, 0.433107132, 0.800781053),
  G2 = c(0.129541639, 0.791633452, 0.085196075, 0.221191986),
  G3 = c(0.741696359, 0.502163442, 0.071400934, 0.918588422)
)

2. 管道流绘图代码(无冗余中间变量)

无需单独存储转换后的长表,直接通过管道传递数据:

library(tidyverse)

df %>% 
  rownames_to_column("sample_id") %>% # 把行名的样本id转为单独一列
  pivot_longer(cols = -sample_id, names_to = "gene", values_to = "expression") %>% # 宽表转长表
  ggplot(aes(x = gene, y = expression)) +
  geom_boxplot(fill = "#8ecae6", alpha = 0.7) + # 可自定义填充色、透明度
  labs(x = "基因名称", y = "表达量") +
  theme_classic() # 可替换为你偏好的主题

3. 轻量替代方案(仅加载ggplot2+reshape2)

如果不想加载整个tidyverse,也可以用reshape2的melt函数转长表:

library(ggplot2)
library(reshape2)

# 直接melt转换,自动识别行名作为样本标识
df_melt <- melt(df, variable.name = "gene", value.name = "expression")
ggplot(df_melt, aes(x = gene, y = expression)) + geom_boxplot()

如果之前重塑后绘图未得到预期结果,大概率是转长表时未正确映射基因/表达量字段,上述代码已适配你给出的DataFrame结构,直接代入你的实际数据即可运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:24:02