各位科研小伙伴,是不是经常遇到这样的情况:看到论文里一个超级赞的图,结果作者既没有标明图的类型,也没提供相应的代码?只能干瞪眼,到处求源代码
接下来,小编就要教你一招绝活。利用ChatGPT的识图编程能力,轻松写出图表代码,并且直接绘制出精美的科研数据图表。
从此科研绘图不求人!
参考文献图表
我们以这篇发表近期在ScienceDirect的文献为例
源文献地址:https://doi.org/10.1016/j.jare.2024.06.027
识图-代码生成
我们来复现这篇文献中的图A
对ChatGPT输入指令:
请用随机数据复现该图,包括微生物群落的系统发育树,对应序列的KO功能注释
ChatGPT开始分析输出代码....
# 安装并加载必要的包
if (!requireNamespace("ggtree", quietly = TRUE)) install.packages("ggtree")
if (!requireNamespace("ape", quietly = TRUE)) install.packages("ape")
if (!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr")
if (!requireNamespace("tidyr", quietly = TRUE)) install.packages("tidyr")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
library(ggtree)
library(ape)
library(dplyr)
library(tidyr)
library(ggplot2)
# 随机生成系统发育树
set.seed(42)
tree <- rtree(100) # 生成包含100个分支的随机树
# 随机生成KO功能注释
KO_annotations <- data.frame(
label = tree$tip.label,
ko_K00706 = sample(0:4, 100, replace = TRUE),
ko_K01442 = sample(0:4, 100, replace = TRUE),
ko_K07007 = sample(0:4, 100, replace = TRUE),
ko_K15868 = sample(0:4, 100, replace = TRUE)
)
# 将KO功能注释转换为长格式
KO_long <- KO_annotations %>%
pivot_longer(cols = starts_with("ko"), names_to = "KO", values_to = "Count")
# 绘制环状系统发育树
p_tree <- ggtree(tree, layout = "circular") +
geom_tiplab(size = 2, aes(angle = angle))
# 绘制KO功能注释柱状图
p_bar <- ggplot(KO_long, aes(x = label, y = Count, fill = KO)) +
geom_bar(stat = "identity", position = "dodge") +
theme_minimal() +
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
panel.grid = element_blank()) +
scale_fill_brewer(palette = "Set3") +
coord_polar(theta = "x")
# 将环状树和柱状图组合在一起
library(cowplot)
plot_grid(p_tree, p_bar, ncol = 1, align = "v", rel_heights = c(2, 1))
跟我们预期不太一致,ChatGPT分开了2张图。我们输入优化指令
代码优化
根据输出情况优化指令
添加的柱状图需要分布在环状发育树外围
ChatGPT开始优化代码....
# 安装并加载必要的包
if (!requireNamespace("ggtree", quietly = TRUE)) install.packages("ggtree")
if (!requireNamespace("ape", quietly = TRUE)) install.packages("ape")
if (!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr")
if (!requireNamespace("tidyr", quietly = TRUE)) install.packages("tidyr")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
if (!requireNamespace("RColorBrewer", quietly = TRUE)) install.packages("RColorBrewer")
if (!requireNamespace("patchwork", quietly = TRUE)) install.packages("patchwork")
library(ggtree)
library(ape)
library(dplyr)
library(tidyr)
library(ggplot2)
library(RColorBrewer)
library(patchwork)
# 随机生成系统发育树
set.seed(42)
tree <- rtree(100) # 生成包含100个分支的随机树
# 随机生成KO功能注释
KO_annotations <- data.frame(
label = tree$tip.label,
ko_K00706 = sample(0:4, 100, replace = TRUE),
ko_K01442 = sample(0:4, 100, replace = TRUE),
ko_K07007 = sample(0:4, 100, replace = TRUE),
ko_K15868 = sample(0:4, 100, replace = TRUE)
)
# 将KO功能注释转换为长格式
KO_long <- KO_annotations %>%
pivot_longer(cols = starts_with("ko"), names_to = "KO", values_to = "Count")
# 绘制环状系统发育树
p_tree <- ggtree(tree, layout = "circular") +
geom_tiplab(size = 2, aes(angle = angle))
# 获取树枝角度数据
angle_data <- p_tree$data %>%
filter(isTip) %>%
select(label, angle)
# 将角度数据加入KO注释数据中
KO_long <- KO_long %>%
left_join(angle_data, by = "label")
# 绘制环状系统发育树
p_tree <- ggtree(tree, layout = "circular") +
geom_tiplab(size = 2, aes(angle = angle))
# 添加KO功能注释柱状图到环状树的外围
p_bar <- ggplot(KO_long, aes(x = factor(label, levels = tree$tip.label), y = Count, fill = KO)) +
geom_bar(stat = 'identity', position = position_dodge(width = 0.7)) +
scale_fill_brewer(palette = "Set3") +
coord_polar(theta = "x", start = 0) +
theme_void() +
theme(legend.position = "right")
# 将环状树和柱状图组合在一起
p_combined <- p_tree + inset_element(p_bar, 0, 0, 1, 1)
# 打印绘图结果
print(p_combined)
tips:ChatGPT生成代码,如果报错,直接将报错原因复制,发给ChatGPT即可,ChatGPT会重新优化代码!
如果你需求修改配色,也可以用以上"对话式"的方法让ChatGPT帮你修改配色!
😁这个结果对于我们的目标,还有一些些小差距,但是我们基本可以按照这个思路来进行复现了