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

如何用R的ggplot绘制肿瘤与非肿瘤蛋白组学结果配对对比图

问题描述

我知道本站已有大量类似问题,但还是不知道怎么用到自己的数据上。我需要画一张能关联对应配对组的图,样式类似示例图。我有患者肿瘤(TUMOR)和非肿瘤(NTUMOR)细胞的蛋白质组学质谱分析结果,保存为csv格式,单患者数据结构如下:

ProteinTUMORNTUMOR
A4318100250100
B2356000561100
C145000
D546800012500

读取数据的代码是:

p610 = read.csv("C:\\Users\\Admin\\Desktop\\Gliwice\\Bazy_danych\\10.23\\patient610.csv", header = TRUE, sep = ",")

(注:原路径中的单反斜杠会被R识别为转义符,必须用双反斜杠或正斜杠,否则会报错)

用ggplot绘图时一直报错,我试过这些代码:

p610 = read.csv("C:\\Users\\Admin\\Desktop\\Gliwice\\Bazy_danych\\10.23\\patient610.csv", header = TRUE, sep = ",")
x6=p610$TUMOR

ggplot(data = a610, mapping = aes(x=x6, group = x6))

这里明显错误是把数据框名写成了a610,但实际是p610。

后来我把数据整理成了这种结构的csv:

PatientTUMORId
T43181001
T23560002
T145003
T54680004
N2501001
N5611002
N03
N125004

然后运行代码:

ggplot(p610, aes(y = x6)) +
  geom_point(aes(x = rep(c(-1, 1), each = 8), size = 5) +
  geom_line(aes(x = rep(c(-1, 1), each = 8), group = Id))

但还是有问题,请问怎么用R的ggplot实现目标配对对比图?


解决方案

方法一:基于原始宽格式数据绘图

原始数据是宽格式(每行对应一个蛋白,两列分别为肿瘤/非肿瘤的数值),首先需要将其转换为ggplot更易处理的长格式(tidy data):

  1. 加载依赖包:
library(ggplot2)
library(tidyr) # 用于数据格式重塑
  1. 读取并转换数据:
# 读取数据,用正斜杠避免转义问题
p610 <- read.csv("C:/Users/Admin/Desktop/Gliwice/Bazy_danych/10.23/patient610.csv", header = TRUE, sep = ",")

# 将宽格式转成长格式
p610_long <- pivot_longer(p610, 
                          cols = c(TUMOR, NTUMOR), # 指定要转换的列
                          names_to = "Sample_Type", # 新列:样本类型(肿瘤/非肿瘤)
                          values_to = "Intensity") # 新列:蛋白强度值

转换后的数据结构如下:

ProteinSample_TypeIntensity
ATUMOR4318100
ANTUMOR250100
BTUMOR2356000
BNTUMOR561100
.........
  1. 绘制配对对比图:
ggplot(p610_long, aes(x = Sample_Type, y = Intensity, group = Protein)) +
  geom_point(size = 3, color = "steelblue") + # 绘制散点
  geom_line(color = "gray", linetype = "dashed") + # 用虚线连接同一蛋白的两个样本
  labs(title = "肿瘤vs非肿瘤蛋白强度配对对比",
       x = "样本类型",
       y = "蛋白强度") +
  theme_bw()

如果蛋白强度差异过大,可对y轴取对数避免数值挤压:

ggplot(p610_long, aes(x = Sample_Type, y = Intensity, group = Protein)) +
  geom_point(size = 3, color = "steelblue") +
  geom_line(color = "gray", linetype = "dashed") +
  scale_y_log10() + # 对数转换y轴
  labs(title = "肿瘤vs非肿瘤蛋白强度配对对比(对数轴)",
       x = "样本类型",
       y = "蛋白强度(log10)") +
  theme_bw()

方法二:基于你整理后的长格式数据绘图

你整理后的格式本身没问题,但代码存在语法错误:geom_point括号未闭合、rep的数量错误、引用了未关联的变量x6,修正后的代码如下:

library(ggplot2)

# 读取整理后的长格式数据
p610 <- read.csv("你的整理后数据路径.csv", header = TRUE, sep = ",")

ggplot(p610, aes(x = ifelse(Patient == "T", 1, -1), y = TUMOR, group = Id)) +
  geom_point(size = 3, aes(color = Patient)) + # 按样本类型上色
  geom_line(color = "gray") + # 连接配对的点
  scale_x_continuous(breaks = c(-1,1), labels = c("NTUMOR", "TUMOR")) + # 替换x轴标签
  labs(title = "肿瘤vs非肿瘤蛋白强度配对对比",
       x = "样本类型",
       y = "蛋白强度",
       color = "样本类型") +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:47:03