在基因表达分析中,FPKM(Fragments Per Kilobase of transcript per Million mapped reads) 是常用的基因表达定量指标。为了直观展示不同样本中基因的表达分布,小提琴图(Violin Plot)因其能同时显示数据分布和密度,成为科研绘图的热门选择。然而,传统工具如R、Python的绘图流程往往涉及繁琐的文件处理、颜色搭配调试和图例优化等,让研究者耗费大量时间,更是令生信新手望而生畏。AI大模型的介入彻底改变了这一局面。只需提供您的基因表达量文件,并用自然语言描述定制需求,AI即可自动生成绘图脚本,真正实现"专业绘图,一键生成"。本文将带您体验如何通过AI协作,在短短5分钟内完成一幅专业的小提琴图,助您在科研工作中以极致的效率和专业度获得竞争优势!
初步构建绘图提示词
为了让AI能更高效的出图,我们尽量描述的详细一点,这样能够减少我们后面修改的次数更容易得到想要的结果,首先确认自己的路径和绘图需要的文件,我们只需要一个基因表达量文件即可,格式如下:
文件准备完成后,即可询问AI如何编写代码,写完了的提示词如下,大家可以参考一下格式
------------------------------------------
读取1个基因fpkm表达量文件
工作路径:~/work/03.deg
基因fpkm表达量文件: fpkm.xls (纯文本文件,第一列是基因名称,后序列是所有样本表达量信息;第一行是样品名称,后续行是基因在不同样品表达量信息)
使用R语言绘制小提琴图,对表达量取对数
图形类型:小提琴图
主题:隐藏网格线
------------------------------------------
在deepseek输出上面写好的提示词,如果问题复杂可以打开deepthink,这样简单的就不需要了。
AI给出了详细的码,我们来到rstudio运行一下结果如下:
生成的图片基本符合要求,个别地方不太好,比如没有坐标轴,小提琴尾部被截掉等,我们可以提出要求让他修改一下。
得到的结果如下,完全符合要求,如果还有其他需求,也可以继续让他再调整。
最终绘图代码
# 设置工作目录
setwd("~/work/03.deg")
# 读取FPKM文件
fpkm_data <- read.table("fpkm.xls", header = TRUE, row.names = 1, sep = "\t", check.names = FALSE)
# 对表达量取对数(添加1避免log(0))
log_fpkm <- log2(fpkm_data + 1)
# 转换为长格式数据框(ggplot2需要)
library(tidyr)
library(dplyr)
log_fpkm_long <- log_fpkm %>%
as.data.frame() %>%
mutate(gene = rownames(.)) %>%
pivot_longer(cols = -gene, names_to = "sample", values_to = "log_fpkm")
# 加载ggplot2
library(ggplot2)
# 绘制小提琴图(白色背景 + 隐藏网格线 + 完整XY轴)
p <- ggplot(log_fpkm_long, aes(x = sample, y = log_fpkm, fill = sample)) +
geom_violin(trim = F, scale = "width") + # 绘制小提琴图
geom_boxplot(width = 0.1, fill = "white", outlier.size = 0.5) + # 添加箱线图作为补充
theme(
# 1. 保持白色背景(默认theme_grey()风格)
panel.background = element_rect(fill = "white"), # 白色背景
plot.background = element_rect(fill = "white"), # 图表区域白色
# 2. 隐藏所有网格线
panel.grid.major = element_blank(), # 主网格线(横线)
panel.grid.minor = element_blank(), # 次网格线(竖线/细线)
# 3. 确保XY轴显示
axis.line = element_line(color = "black"), # 黑色坐标轴线
axis.text.x = element_text(angle = 45, hjust = 1, size = 10), # X轴标签
axis.text.y = element_text(size = 10), # Y轴标签
axis.title.x = element_text(size = 12, face = "bold"), # X轴标题
axis.title.y = element_text(size = 12, face = "bold"), # Y轴标题
# 4. 图例(如果需要)
legend.position = "none" # 隐藏图例(可选)
) +
labs(
x = "Sample", # X轴标题
y = "Log2(FPKM + 1)", # Y轴标题
title = "Gene Expression Violin Plot" # 图表标题
)
# 显示图形
print(p)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!