一觉醒来生信工程师的天塌了

大家好,沉寂很久,我又回来了。当前的人工智能(Artificial Intelligence,AI)大浪潮汹涌澎湃,AI大语言模型质的突破,加速了人类实现通用AI和强AI的进程,现在市面上已经有很多AI Agent,包括生物信息AI Agent。它可以做很多事情,写代码,写流程,写技术文档,文献资料解读、记忆都不在话下,传统的生信分析工程师受到了极大的挑战,一些简单的分析工作将会被快速取代,AutoBA可以自动化编写生信分析流程然后自己进行Debug,自己执行,最后反馈给用户分析结果,这已经很厉害了,但是还有进步空间。一些特殊领域的分析,例如单细胞转录组中的细胞类型鉴定分析,通常大家认为是人工专家注释结果更可信,但是缺点也很明显,就是注释过程费时费力,但是GPTcelltype可以使用GPT4进行注释,大大加快细胞类型注释的过程。类似这样的例子有很多,还比如生信工程师通常要做的工作内容数据统计分析和可视化绘图,通常大家的做法是会收集整理自己的绘图方法和代码库,然后基于需求和数据进行特定的调整,直到实现目标,也是费时费力的一件事情,但是现在市面上的AI大语言模型都支持数据分析和编写代码,绘图代码也不在话下(简单的,已有的图表)。下面我举几个例子,使用DeepSeek官网deepseek-r1进行绘图代码的生成,然后在Rstudio里进行验证。

我这样提问:hi, 帝斯,你好,我是生信工程师,我正在研究如何使用AI进行绘制科学图表,请帮我生成R语言绘图中的常见图表和对应的测试数据,谢谢

然后它是这样思考的:

“好的,用户是一位生物信息学工程师,正在研究如何用AI绘制科学图表,需要R语言中常见图表的示例和对应的测试数据。首先,我需要确定用户的具体需求。他们可能希望生成一些常见的图表类型,比如散点图、折线图、柱状图、箱线图、热图、直方图、火山图和PCA图。这些图表在生物信息学中应用广泛,比如基因表达分析、差异表达基因的可视化、数据分布观察等。

接下来,我需要为每个图表生成合适的测试数据。测试数据应该简单但具有代表性,能够展示图表的特点。例如,散点图和折线图需要两个连续变量,可能还需要分组变量。柱状图可能需要分类变量和对应的数值。箱线图则需要不同组的分布数据。热图需要矩阵形式的数据,而火山图需要log2折叠变化和p值。PCA图则需要降维后的数据。

然后,我需要考虑用户可能的背景。作为生信工程师,他们可能处理的数据类型包括基因表达矩阵、实验条件对比、统计测试结果等。因此,测试数据应模拟这些场景,比如用基因表达数据作为例子,或者实验组和对照组的比较。

用户可能没有明确说明是否需要代码注释或解释,但为了 clarity,最好在代码中添加注释,说明每个步骤的作用。此外,用户可能希望代码可以直接运行,所以需要确保示例代码的正确性,比如正确的包安装(ggplot2、ggrepel等),以及数据生成的合理性。

另外,用户可能对图表的美观和出版质量有要求,因此代码中应包括调整颜色、主题、标签等元素,以提升图表的可读性和专业性。比如使用ggplot2的主题函数,调整颜色方案,添加标题和轴标签。

还需要考虑用户可能不熟悉的包,比如ggrepel用于避免标签重叠,pheatmap用于热图,因此需要在代码中注明需要安装这些包。同时,火山图和PCA图在生信分析中非常常见,提供这些示例能直接满足他们的需求。

最后,确保每个示例都独立,用户可以单独运行每个代码块,方便他们逐一测试和学习。测试数据生成部分要简洁,但足够展示图表特性,比如使用rnorm生成正态分布数据,或使用矩阵生成热图数据。

总结一下,我需要为每种图表生成示例代码,附带测试数据,并确保代码正确、注释清晰,符合生信领域的常见应用场景,同时提供必要的可视化调整,使图表更美观和专业。”

你好!很高兴能帮助生物信息工程师进行科学绘图。以下是常见的科学图表类型、对应的R代码示例以及生成的测试数据。我会尽量使用生物信息学相关的示例数据。

1. 散点图 (Scatter Plot)

应用场景: 基因表达量相关性分析

# 测试数据(模拟两个基因在20个样本中的表达量)

set.seed(123)

data <- data.frame(

  GeneA = rnorm(20, mean=10, sd=2),

  GeneB = rnorm(20, mean=10, sd=3),

  Group = sample(c("Control", "Treatment"), 20, replace=TRUE)

)

# 绘图代码

library(ggplot2)

ggplot(data, aes(x=GeneA, y=GeneB, color=Group)) +

  geom_point(size=3) +

  labs(title="Gene Expression Correlation", x="Gene A (log2CPM)", y="Gene B (log2CPM)") +

  theme_bw()

Rstudio绘图:

2. 折线图 (Line Plot)

应用场景: 时间序列实验(如药物处理后的基因表达变化)

# 测试数据(3个时间点,3个基因)

time_data <- expand.grid(

  Time = c(0, 6, 12, 24),

  Gene = c("GeneX", "GeneY", "GeneZ")

)

time_data$Expression <- c(1.0, 1.2, 1.5, 2.0, 0.8, 0.5, 0.3, 0.2, 1.5, 1.6, 1.4, 1.3)

# 绘图代码

ggplot(time_data, aes(x=Time, y=Expression, color=Gene, group=Gene)) +

  geom_line(linewidth=1) +

  geom_point(size=3) +

  labs(title="Time-course Gene Expression", x="Time (hours)", y="Normalized Expression") +

  theme_minimal()

Rstudio绘图:


3. 柱状图/条形图 (Bar Plot)

应用场景: 不同实验组的差异基因数量统计

# 测试数据

group_data <- data.frame(

  Condition = c("Control", "Treatment1", "Treatment2"),

  DEGs = c(150, 450, 300) # 差异表达基因数量

)

# 绘图代码

ggplot(group_data, aes(x=Condition, y=DEGs, fill=Condition)) +

  geom_col(width=0.7) +

  scale_fill_brewer(palette="Set2") +

  labs(title="Differentially Expressed Genes", y="Number of DEGs") +

  theme_classic()

Rstudio绘图:

4. 箱线图 (Boxplot)

应用场景: 不同样本组中某基因表达量的分布

# 使用散点图的测试数据

ggplot(data, aes(x=Group, y=GeneA, fill=Group)) +

  geom_boxplot(alpha=0.6) +

  geom_jitter(width=0.1, size=2) +

  labs(title="GeneA Expression Distribution", y="GeneA Expression (log2CPM)") +

  scale_fill_manual(values=c("#66c2a5", "#fc8d62")) +

  theme_bw()

Rstudio绘图:

5. 热图 (Heatmap)

应用场景: 基因表达聚类分析

# 测试数据(5个基因在10个样本中的表达矩阵)

set.seed(456)

heatmap_data <- matrix(

  rnorm(50, mean=0, sd=1),

  nrow=5,

  dimnames=list(paste0("Gene", 1:5), paste0("Sample", 1:10))

)

# 绘图代码

library(pheatmap)

pheatmap(

  heatmap_data,

  scale="row",          # 按行标准化

  color=colorRampPalette(c("blue", "white", "red"))(50),

  main="Gene Expression Heatmap"

)

Rstudio绘图:


6. 直方图 (Histogram)

应用场景: 基因表达量分布检查

# 使用GeneA数据

ggplot(data, aes(x=GeneA)) +

  geom_histogram(binwidth=1, fill="#4e79a7", color="white") +

  labs(title="GeneA Expression Distribution", x="Expression Level") +

  theme_light()

Rstudio绘图:

7. 火山图 (Volcano Plot)

应用场景: 差异表达基因可视化

# 测试数据(100个基因的差异分析结果)

set.seed(789)

volcano_data <- data.frame(

  Gene = paste0("Gene", 1:100),

  log2FC = rnorm(100, mean=0, sd=2),

  pvalue = 10^(-runif(100, min=0, max=3))

# 这里它生成的代码有点问题,就是少了一个括号,导致无法正常执行该代码,无法生成volcano_datad对象。修改一下:volcano_data <- data.frame(Gene = paste0("Gene", 1:100),

                          log2FC = rnorm(100, mean=0, sd=2),

                          pvalue = 10^(-runif(100, min=0, max=3)))

volcano_data$padj <- p.adjust(volcano_data$pvalue, method="BH")

# 绘图代码

library(ggrepel)

ggplot(volcano_data, aes(x=log2FC, y=-log10(pvalue))) +

  geom_point(aes(color=ifelse(abs(log2FC)>1 & padj<0.05, "Significant", "NS"))) +

  scale_color_manual(values=c("gray", "red")) +

  geom_text_repel(data=subset(volcano_data, abs(log2FC)>2 & padj<0.01),

                  aes(label=Gene), size=3) +

  labs(title="Volcano Plot of DEGs", x="log2(Fold Change)", y="-log10(p-value)") +

  theme_bw()

Rstudio绘图:


8. PCA图

应用场景: 样本聚类分析

# 使用热图的测试数据

pca_result <- prcomp(t(heatmap_data), scale.=TRUE)

pca_df <- as.data.frame(pca_result$x[,1:2])

pca_df$Group <- ifelse(grepl("Sample[1-5]", rownames(pca_df)), "GroupA", "GroupB")

ggplot(pca_df, aes(x=PC1, y=PC2, color=Group)) +

  geom_point(size=4) +

  stat_ellipse(level=0.95) +

  labs(title="PCA Plot of RNA-seq Samples") +

  theme_minimal()

Rstudio绘图:

如果需要调整任何图表的样式或生成特定类型的数据,请随时告诉我!生物信息学中常见的其他图表(如生存曲线、GO/KEGG富集气泡图等)也可以补充。

它既然让我提高难度,那我们就再试试:非常好,请继续帮我生成绘制生存曲线、GO/KEGG条形图、气泡图的R代码,并有测试数据,谢谢

好的,我现在需要帮助用户生成生存曲线、GO/KEGG条形图和气泡图的R代码以及测试数据。首先,我要回想用户之前的请求,他们是一名生物信息工程师,正在研究如何使用AI绘制科学图表,之前已经得到了常见的图表类型如散点图、箱线图等的代码和测试数据。现在用户希望继续补充生存曲线、GO/KEGG的条形图和气泡图。

首先,生存曲线(Kaplan-Meier曲线)在生物信息学中常用于生存分析,比如癌症研究中患者存活时间的比较。我需要生成模拟的生存数据,包括生存时间、事件状态(如死亡与否)和分组变量(比如不同治疗组或基因表达高低)。然后使用R中的survival和survminer包来绘制曲线,并添加统计检验(如log-rank test)。测试数据需要合理,比如时间范围、事件比例等要符合实际情况。

接下来是GO/KEGG富集分析的条形图和气泡图。这两种图表通常用于展示基因富集分析的结果,条形图一般显示富集项的名称和对应的p值或富集因子,而气泡图则可能包含更多信息,比如基因数量、p值大小等。测试数据需要包括富集项的名称、p值、调整后的p值(如FDR)、基因数量、富集因子等字段。需要确保数据格式正确,比如字符型、数值型变量,并且值范围合理,比如p值在0到1之间。

对于条形图,用户可能希望按照p值或富集因子排序,可能需要使用ggplot2的geom_col,并调整颜色、标签等。气泡图则使用geom_point,点的大小通常表示基因数量,颜色表示p值或FDR,x轴可能是富集因子,y轴是富集项名称。需要确保坐标轴标签、图例等清晰。

我需要检查每个代码块是否正确,比如包是否正确加载,函数参数是否合理,比如在生存曲线中使用survfit函数,并在ggsurvplot中设置参数。测试数据是否生成正确,比如生存数据中是否有time, status, group列,GO/KEGG数据中的列名是否正确。

另外,用户可能希望代码能够直接运行,所以需要确保没有语法错误,比如括号是否闭合,字符串是否正确引用。比如在之前的火山图代码中,用户指出有一个语法错误,可能是在生成volcano_data时缺少右括号,这次要避免类似错误。

最后,可能需要添加注释,解释每段代码的作用,帮助用户理解。比如在生存分析中,解释status=1代表事件发生,group分为高低风险组。在GO/KEGG图表中,解释富集因子和p值的含义。此外,提醒用户如何调整图形参数,比如颜色、主题、标签角度等,以满足个性化需求。

总结步骤:

1. 生成生存分析的测试数据,包括生存时间、状态和分组。

2. 使用survival和survminer包绘制Kaplan-Meier曲线,并添加统计检验。

3. 生成模拟的GO/KEGG富集结果数据,包含必要字段。

4. 使用ggplot2绘制条形图和气泡图,调整美学参数。

5. 检查代码正确性,确保数据生成和绘图无误。

6. 添加注释和解释,帮助用户理解代码和调整参数。

以下是生存曲线、GO/KEGG富集条形图和气泡图的R代码及测试数据,均使用生物信息学典型场景设计:

1.生存曲线 (Kaplan-Meier Plot)

应用场景: 癌症患者高低风险组的生存分析

# 加载包

library(survival)

library(survminer)

# 生成测试数据(30个患者的生存时间)

set.seed(123)

surv_data <- data.frame(

  Time = c(rnorm(15, mean=24, sd=5), rnorm(15, mean=18, sd=6)),  # 高风险组生存时间更短

  Status = sample(c(0, 1), 30, replace=TRUE, prob=c(0.2, 0.8)),  # 80%观察到事件

  Group = rep(c("Low Risk", "High Risk"), each=15)

)

# 拟合生存曲线

fit <- survfit(Surv(Time, Status) ~ Group, data=surv_data)

# 绘图

ggsurvplot(

  fit,

  data = surv_data,

  pval = TRUE,                    # 显示log-rank检验p值

  risk.table = TRUE,              # 显示风险表

  palette = c("#2E9FDF", "#E7B800"),

  title = "Survival Analysis by Risk Group",

  xlab = "Time (months)",

  legend.labs = c("Low Risk", "High Risk")

)

2. GO/KEGG富集条形图

应用场景: 展示显著富集的生物通路

# 生成测试数据

go_data <- data.frame(

  Term = c("immune response", "cell cycle", "DNA repair",

          "apoptosis", "signal transduction"),

  FoldEnrichment = c(3.2, 4.5, 2.8, 2.1, 1.9),

  p.adjust = c(1e-5, 1e-7, 0.002, 0.03, 0.15),

  Count = c(15, 20, 12, 8, 5)

)

# 按富集因子排序

go_data <- go_data[order(-go_data$FoldEnrichment), ]

# 绘图

ggplot(go_data, aes(x=FoldEnrichment, y=reorder(Term, FoldEnrichment))) +

  geom_col(aes(fill=-log10(p.adjust)), width=0.7) +

  scale_fill_gradient(low="blue", high="red", name="-log10(FDR)") +

  geom_text(aes(label=Count), hjust=1.2, color="white") +  # 显示基因数量

  labs(title="GO Enrichment Analysis",

      x="Fold Enrichment",

      y="Biological Process") +

  theme_minimal() +

  theme(axis.text.y = element_text(size=10))


3. KEGG富集气泡图

应用场景: 可视化通路富集结果

# 使用GO测试数据,增加GeneRatio列

go_data$GeneRatio <- go_data$Count / max(go_data$Count) * 100

# 绘图

ggplot(go_data, aes(x=FoldEnrichment, y=reorder(Term, FoldEnrichment))) +

  geom_point(aes(

    size = Count,          # 点大小表示基因数量

    color = -log10(p.adjust) # 颜色深度表示显著性

  )) +

  scale_color_gradient(low="blue", high="red") +

  scale_size(range = c(3, 8)) +      # 调整点大小范围

  labs(

    title = "KEGG Pathway Enrichment",

    x = "Fold Enrichment",

    y = "",

    color = "-log10(FDR)",

    size = "Gene Count"

  ) +

  theme_bw() +

  theme(

    panel.grid.major = element_line(linetype="dashed"),

    axis.text.y = element_text(face="bold")

  )


还贴心的给出了建议和使用方法:

测试数据说明

生存分析数据:

Time: 生存时间(月)

Status: 0=删失,1=事件发生

Group: 风险分组

富集分析数据:

Term: 功能术语/通路名称

FoldEnrichment: 富集倍数

p.adjust: 校正后p值

Count: 富集的基因数量

GeneRatio: 基因比例(用于气泡图)

代码调整建议

生存曲线:

修改palette参数调整颜色

添加surv.median.line = "hv"显示中位生存时间线

富集图:

调整scale_size()范围控制点的大小

使用scale_x_continuous(limits=)限制坐标轴范围

添加theme(axis.text.x = element_text(angle=45, hjust=1))旋转x轴标签

如果需要更具体的个性化调整或解释统计方法,请随时告诉我!

看完这些,你有什么想法???

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容