大家好,沉寂很久,我又回来了。当前的人工智能(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轴标签
如果需要更具体的个性化调整或解释统计方法,请随时告诉我!
看完这些,你有什么想法???