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

如何定性绘制呈现基因测序数据的表格型可视化图

测序数据可视化绘图指导与代码解析

一、需求说明

需要绘制类似《Nature Medicine》中常见的测序数据可视化图——以带颜色填充的表格形式,展示基因在不同样本中的gain/loss状态。

二、现有自定义tableplot函数解析

你提供的自定义函数基于基础R的image()实现色块表格图,以下是逐行解析:

函数定义与参数

tableplot <- function(ret, nrow, ncol, main){
  • ret:输入数据框,包含两列:x为单元格显示文本,y为状态值(0代表loss,1代表gain)
  • nrow:绘图行数(示例中对应基因维度)
  • ncol:绘图列数(示例中对应样本维度)
  • main:图的标题

核心绘图逻辑

m <- matrix(as.integer(ret$y),nrow,ncol)

将ret$y的状态值转为整数,再按指定行列数转换成矩阵,作为色块填充的数据源。

image(1:nrow,1:ncol,m,col=c("grey","green"),axes=FALSE, xlab="gene",ylab="sample",main=main) 
  • image():基础R的色块绘图函数,用于绘制单元格底色
  • 1:nrow/1:ncol:定义x、y轴坐标范围,对应表格的行和列位置
  • col=c("grey","green"):绑定状态与颜色,0(loss)用灰色,1(gain)用绿色
  • axes=FALSE:隐藏默认坐标轴,避免干扰表格布局
  • xlab/ylab:设置x、y轴标签,分别对应基因和样本
text(row(m),col(m),labels=matrix(ret$x,nrow,ncol))

在每个色块的对应位置(row(m)取行坐标,col(m)取列坐标),添加ret$x中的文本标签,同时将文本转为对应行列的矩阵,确保位置匹配。

示例数据与调用

ret <- data.frame("x" = c("1-gene1","1-gene2","2-gene1","2-gene2"), "y" = c(1,1,0,1)) #0 is loss, 1 is gain.
tableplot(ret, 2, 2, "My tests") 
  • 构造2行2列的示例数据,x以「样本-基因」格式命名,y对应每个基因在样本中的状态
  • 调用函数生成标题为"My tests"的可视化图

三、geomSplitTile代码解析(类似解决方案)

你提到的geomSplitTile是基于ggplot2扩展的自定义几何对象,专门用于绘制分块填充的单元格(适合展示测序数据中一个单元格内的多种状态,比如同时存在gain和loss的细分情况),核心逻辑如下:

核心设计思路

geomSplitTile是对ggplot2原生geom_tile()的扩展,允许将单个单元格按比例分割为多个色块,对应不同状态值,适配更复杂的测序变异数据展示需求。

关键逻辑拆解

常见的geomSplitTile实现包含三个核心部分:

  • 数据预处理:接收包含x(样本/基因)、y(基因/样本)、value(状态占比/类型)的数据,计算每个单元格内各状态的分割比例,生成分块坐标数据
  • 几何对象绘制:基于计算后的坐标,绘制多个小矩形填充单个单元格,每个分块对应一种状态颜色
  • 美学映射:支持将fill映射到状态类型,width/height设置单元格大小,split参数指定分割方向(横向/纵向)

简化模拟示例

无需自定义geom,用ggplot2也能实现类似分块效果:

library(ggplot2)
# 构造含分块状态的示例数据
df <- data.frame(
  sample = rep(c("Sample1", "Sample2"), each=2),
  gene = rep(c("Gene1", "Gene2"), 2),
  status = c("gain", "gain", "loss", "gain"),
  proportion = c(1,1,1,1) # 若需分块可设0.5等比例值
)

ggplot(df, aes(x=sample, y=gene)) +
  geom_tile(aes(fill=status), color="white") +
  geom_text(aes(label=paste0(gene,"-",sample)), color="black") +
  scale_fill_manual(values=c("gain"="green", "loss"="grey")) +
  labs(x="Sample", y="Gene", title="Sequencing Data Visualization") +
  theme_minimal()

四、优化建议

  • 改用ggplot2提升灵活性:基础R的image()扩展性有限,ggplot2能更方便地调整样式、添加图例、适配复杂数据
  • 适配大规模数据:若样本/基因数量较多,可使用ComplexHeatmap包,它专为测序数据设计,支持聚类、注释等功能
  • 自定义颜色映射:可调整配色(比如红色代表loss、绿色代表gain),贴合科研绘图的常规习惯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:13:13