前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >只需2步!用ChatGPT打造CNS级精美图表

只需2步!用ChatGPT打造CNS级精美图表

作者头像
用户11203141
发布2025-03-06 10:50:46
发布2025-03-06 10:50:46
6600
代码可运行
举报
运行总次数:0
代码可运行

各位科研小伙伴,是不是经常遇到这样的情况:看到论文里一个超级赞的图,结果作者既没有标明图的类型,也没提供相应的代码?只能干瞪眼,到处求源代码

接下来,小编就要教你一招绝活。利用ChatGPT的识图编程能力,轻松写出图表代码,并且直接绘制出精美的科研数据图表。

从此科研绘图不求人!

参考文献图表

我们以这篇发表近期在ScienceDirect的文献为例

源文献地址:https://doi.org/10.1016/j.jare.2024.06.027

识图-代码生成

我们来复现这篇文献中的图A

对ChatGPT输入指令:

请用随机数据复现该图,包括微生物群落的系统发育树,对应序列的KO功能注释

ChatGPT开始分析输出代码....

ChatGPT输出代码

代码语言:javascript
代码运行次数:0
复制
# 安装并加载必要的包
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开始优化代码....

代码语言:javascript
代码运行次数:0
复制
# 安装并加载必要的包
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帮你修改配色!

😁这个结果对于我们的目标,还有一些些小差距,但是我们基本可以按照这个思路来进行复现了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信俱乐部 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ChatGPT输出代码
  • 运行结果
  • 最终运行结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档