先给结论:用 Codex 这类“能读代码、能执行命令、能根据报错自动修改”的编码智能体,配合 Nature Figure 式的科研绘图工作流,确实可以把论文配图从“打开软件手动调半天”变成“把需求写清楚 → AI 自动写脚本 → 自动运行 → 自动修错 → 批量出图”。流程能跑通之后,一张图从零到成品只需要几分钟,而且所有绘图代码都在本地,数据不会因为“手动拖拽”而丢步骤。
Codex 的价值不只在“会写代码”。它更像一个本地开发代理:能查看项目目录、创建文件、安装依赖、执行 Python 脚本、读取报错日志、继续修复,直到任务完成。这种能力放在论文配图场景里非常对路,因为科研绘图本身就是“多步试错型”任务:先读数据,再选图型,再调字体配色,再导出矢量图,再检查坐标轴和显著性标记有没有溢出。
本文会带读者完成四件事:
- 安装并配置 Codex CLI;
- 搭建一套 Nature Figure 式科研绘图目录;
- 跑通“自然语言描述 → 生成绘图脚本 → 自动执行 → 修复报错 → 输出论文级图片”完整流程;
- 把绘图流程改成批量任务,并整理常见问题排查表。
适合读者:研究生、科研人员、需要周期性产出图表的工程师,以及想了解“编码智能体到底能不能用于实际工作”的人。先说明一点,下文会把“Nature Figure”当成一类“论文级程序化绘图工作流”来拆解,不绑定某一个特定仓库的启动脚本。包括 Codex 在内的编码智能体,加上本地 Python 绘图程序化方案,共同构成这套流程。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 服务类型 | 编码智能体(Coding Agent)驱动的科研绘图自动化工作流 |
| 核心工具 | Codex CLI + Nature Figure 式绘图脚本工作流 |
| 主要功能 | 根据自然语言需求自动生成 Python 绘图脚本、自动执行、自动修复报错、批量出图 |
| 硬件要求 | 基础图表绘制在 CPU 上即可完成;若把模型换成本地大模型,再按需考虑 GPU |
| 显存占用 | 本地 Python 绘图脚本不依赖 GPU,显存占用以实际运行环境为准 |
| 支持平台 | Windows / macOS / Linux,Codex CLI 常见安装方式依赖 Node.js 或包管理器,以官方文档为准 |
| 启动方式 | 命令行交互模式、非交互执行模式、桌面版或 IDE 插件,按官方发布版本选择 |
| 接口能力 | 支持通过 API Key 或账号登录调用云端模型;也支持配置 OpenAI 兼容的第三方 API 服务 |
| 批量任务 | 支持。通过非交互命令或 Shell / Python 脚本循环处理多组数据和多张图 |
| 适合场景 | 科研图表、论文配图、实验报告可视化、批量生成报表图 |
2. 适用场景与使用边界
这套方案最适合下面几类使用者:
- 刚接触科研绘图,不熟悉 matplotlib 和 seaborn 各种参数的人;
- 每周要出十几张图,希望把绘图逻辑沉淀成脚本的人;
- 论文返修时需要统一字体、配色、尺寸,希望全局调整的人;
- 想把手动 GUI 操作替换成“数据 + 脚本 + 版本管理”流程的团队。
使用边界也很明确:Codex + Nature Figure 解决的是“从真实数据到成品图”的自动化问题,不能用来“无中生有”生成实验数据,更不能代替研究人员对数据真实性和统计方法负责。
另外必须强调合规问题:
- 实验数据必须真实,不能用 AI 伪造样本、篡改测量值;
- 如果数据来自未发表实验,要注意保密和脱敏要求,不要直接上传到未授权的外部服务;
- 生成图表时如果参考了别人的配色方案、版式设计,发表前要确认版权和引用要求;
- 第三方 API 服务有各自的数据使用条款,敏感数据接入前先确认是否符合规定。
3. 本地部署环境准备
这套工作流没有太高的硬件门槛。Codex 本身是云端模型驱动,本地主要跑 Python 绘图脚本,CPU 和内存够用就行。
推荐前置环境:
- Node.js 18 或更高版本,用于通过 npm 安装 Codex CLI;具体版本要求以官方文档为准;
- Python 3.9 以上;
- Git,用于版本管理;
- 能调用 Codex 模型的账号或 API Key;
- 磁盘空间预留几个 GB,包含 Python 环境、依赖包和输出图片。
建议新建一个独立的工作目录,并准备requirements.txt:
pandas>=2.0 numpy>=1.24 matplotlib>=3.7 seaborn>=0.13 scipy>=1.10安装依赖:
pip install -r requirements.txt如果网络环境下载慢,可以临时切换 pip 镜像源,但要注意镜像源只解决 Python 包下载问题,不影响 Codex 云端服务的访问。
绘图脚本建议使用matplotlib的Agg后端,不弹 GUI 窗口,适合服务器和批处理场景:
import matplotlib matplotlib.use("Agg")4. Codex 安装部署与服务访问
Codex CLI 的实际安装方式以官方文档为准。常见的安装入口是 npm 或包管理器。下面给出通用模板:
npm install -g @openai/codex安装完成后检查版本:
codex --version codex --help如果命令提示“不是内部命令”或“command not found”,说明 npm 全局安装路径没有加入 PATH,需要按当前系统的 Node.js 安装目录手动配置环境变量。
4.1 登录与 API Key 配置
Codex 一般支持账号登录或 API Key 两种方式,二选一即可。账号登录:
codex login使用 API Key 时,在终端配置环境变量:
export OPENAI_API_KEY="你的 Key"Windows PowerShell 下对应:
$env:OPENAI_API_KEY="你的 Key"4.2 接入第三方 API 服务
Codex 可以配置 OpenAI 兼容的 API 服务。思路很简单:修改 API Base URL、API Key 和模型名。具体配置项以你使用的服务商文档为准,下面只是通用模板:
export OPENAI_BASE_URL="https://your-api-provider.example.com/v1" export OPENAI_API_KEY="your-key"调用时指定模型:
codex exec --model your-model-name "请读取 data/xxx.csv 并画图"需要特别注意:API Base URL、模型名、认证方式每个服务商都不一样。如果提示“模型不受支持”或“连接失败”,优先检查账号类型、模型名拼写和网络连通性。如果所在网络环境无法直接访问目标 API 服务,需要先确认合规的访问方案,而不是绕过任何网络边界。
4.3 交互模式与非交互模式
交互模式适合第一次调试:
codex在交互终端里直接输入需求,Codex 会给出执行计划,并逐步操作项目文件。
非交互模式适合脚本调用:
codex exec "你的需求描述"exec子命令具体名称可能随版本变化,建议先用codex --help查看当前版本的可用命令。
5. Nature Figure 科研绘图目录设计
一套可复用的自动绘图工程,建议按下面结构组织:
my_figure_project/ ├── data/ │ └── summary_data.csv ├── scripts/ │ └── make_figure_1.py ├── figures/ │ ├── figure1.svg │ └── figure1.png ├── requirements.txt └── FIGURE_SPEC.mdFIGURE_SPEC.md是给 Codex 看的“需求说明书”。它不需要写得多完整,但必须把下面几项写清楚:输入文件、图型、X 轴和 Y 轴含义、字体、输出格式和输出目录。
示例:
# 图 1:处理组 vs 对照组的定量比较 - 输入数据:data/summary_data.csv - 图型:箱线图 + 半透明散点 - X 轴:group 列 - Y 轴:value 列 - 配色:Nature 期刊常见配色,避免默认 matplotlib 蓝橙色 - 显著性检验:Mann-Whitney U,p < 0.05 时添加星号 - 字体:Arial 或 Nimbus Sans,字号 8pt - 输出:figures/figure1.svg 和 figures/figure1.png,PNG 为 300 DPI这个文件既是 Codex 的输入,也是人工复核的依据。需求写得越具体,Codex 返工次数越少。
6. 功能测试与效果验证
先准备一份小的演示数据。可以自己生成一份不含真实实验信息的 CSV:
import pandas as pd import numpy as np rng = np.random.default_rng(42) data = { "group": ["Control"] * 30 + ["Treatment"] * 30, "value": np.concatenate([ rng.normal(5.0, 1.0, 30), rng.normal(6.2, 1.3, 30) ]) } df = pd.DataFrame(data) df.to_csv("data/summary_data.csv", index=False) print(df.head())然后进入 Codex 交互模式,输入:
请读取 data/summary_data.csv,按照 FIGURE_SPEC.md 的要求生成图表。 步骤: 1. 在 scripts/ 目录下创建 make_figure_1.py; 2. 安装缺失的 Python 包; 3. 执行脚本; 4. 如果报错,根据报错信息修复代码; 5. 确认 figures/ 下出现 figure1.svg 和 300 DPI 的 figure1.png。预期流程是:Codex 先读取FIGURE_SPEC.md,再检查数据和依赖,然后写脚本、执行、看输出。中途如果报错,比如缺少 seaborn 或 scipy,它会尝试安装并继续。
6.1 基础出图判断标准
任务结束后,按下面标准检查:
scripts/make_figure_1.py是否存在,且能够独立运行;figures/figure1.svg是否生成,SVG 是矢量格式;figures/figure1.png是否满足 300 DPI;- 图片中 X 轴、Y 轴、图例、显著性标记是否完整;
- 箱体颜色和散点颜色是否有明显区分;
- 文字是否溢出画布。
只有这些条件全部满足,才能算是“论文级”图片。AI 生成的图必须人工复核统计检验部分,不能直接放进论文。
6.2 自动修复链路测试
Codex 最值得验证的能力不是“一次写对”,而是“报错之后能不能自己修”。可以故意制造一个错误,比如把matplotlib.use("Agg")删掉,或者让脚本引用一个不存在的列名,再让 Codex 运行脚本。
如果它能根据 Traceback 定位到具体行,并给出修复方案,说明自动修复链路是通的。这是判断编码智能体是否值得长期使用的核心指标。
6.3 样式与期刊格式验证
论文级图片不只是“能显示数据”,还要满足期刊要求。常见要求包括:
- 矢量格式输出,避免位图放大模糊;
- 字体统一,图中所有文本使用同一字体和字号;
- 坐标轴刻度方向、线宽、图例位置合理;
- 图片宽度匹配期刊单栏或双栏尺寸;
- 颜色方案考虑灰度打印效果。
这些样式约束都可以写进FIGURE_SPEC.md。每次换期刊,只需要改需求文档,再让 Codex 统一更新绘图脚本。
7. 接口 API 与批量任务
Codex CLI 本身提供命令行接口,适合“需求固定、批量执行”的场景。批量绘图有两种典型做法。
7.1 把绘图脚本包装成可复用 CLI
让 Codex 生成一个带命令行参数的绘图脚本,这样后续所有图都复用同一套逻辑:
# scripts/make_figure.py import argparse from pathlib import Path import matplotlib matplotlib.use("Agg") import pandas as pd import matplotlib.pyplot as plt def load_data(path: Path) -> pd.DataFrame: return pd.read_csv(path) def make_figure(data_path: Path, output_dir: Path) -> None: df = load_data(data_path) output_dir.mkdir(parents=True, exist_ok=True) fig, ax = plt.subplots(figsize=(4.0, 3.0), dpi=300) df.boxplot(column="value", by="group", ax=ax, grid=False) ax.set_xlabel("Group") ax.set_ylabel("Value") fig.tight_layout() output_dir.joinpath("figure.png").write_bytes(b"") fig.savefig(output_dir / "figure.png", dpi=300) fig.savefig(output_dir / "figure.svg") if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--data", type=Path, required=True) parser.add_argument("--output", type=Path, required=True) args = parser.parse_args() make_figure(args.data, args.output)运行:
python scripts/make_figure.py \ --data data/summary_data.csv \ --output figures/7.2 批量处理多组数据
数据文件按规则命名后,用 Python 批量调用:
from pathlib import Path from scripts.make_figure import make_figure data_dir = Path("data") output_dir = Path("figures") for csv_path in data_dir.glob("*.csv"): out_dir = output_dir / csv_path.stem make_figure(csv_path, out_dir) print(f"完成: {csv_path.name} -> {out_dir}")这种方式的好处是:Codex 只负责“写一次绘图逻辑”,后续批量执行完全在本地完成,不消耗 API 额度,也不受模型响应速度影响。
7.3 Shell 脚本循环调用 Codex
如果需要每张图都有不同描述,可以用 Shell 循环调用 Codex 非交互命令:
#!/usr/bin/env bash set -euo pipefail for csv in data/*.csv; do echo "开始处理: $csv" codex exec --model your-model-name \ "读取 ${csv},按照 FIGURE_SPEC.md 的样式要求生成图表,输出到 figures/" done实际参数以当前版本 Codex 为准。批量任务里最好加日志和失败重试机制,避免某一张图报错导致整个循环中断。
8. 资源占用与性能观察
Codex 的绘图方案里,模型在云端运行,本地资源消耗主要集中在 Python 绘图环境。对于常规 CSV 数据和图表,CPU 完全够用,不需要 GPU。
但下面几种情况会明显增加资源占用:
- 数据量达到百万行级别,pandas 读取和 matplotlib 渲染内存上升;
- 图片分辨率很高,同时输出多张 300 DPI 大图;
- 图例数量多、散点数量大,SVG 文件体积会明显增长;
- 如果接入了本地大模型作为 Codex 后端,GPU 显存占用会由本地模型决定。
性能观察方法有两种:
# 观察 CPU 和内存 top # 观察 GPU 显存,仅在需要查看本地模型占用时使用 watch -n 1 nvidia-smi针对大数据的优化思路:
- 绘图前先对数据做聚合,不要直接绘制所有原始点;
- 使用
matplotlib.use("Agg")关闭 GUI 渲染; - 输出 SVG 前先检查文件大小;
- 把大批量任务拆小,分批写入输出目录;
- 本地大模型推理时按实际显存调整上下文长度和 batch size,数字以本机测试为准。
9. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
codex提示不是内部命令 | npm 全局路径未加入 PATH | 执行npm root -g查看全局目录 | 将 Node.js 全局目录加入 PATH 后重启终端 |
| 登录失败或账号不受支持 | 账号类型、区域限制或模型名错误 | 查看 Codex 日志和账号模型列表 | 切换账号类型或模型名,按官方文档操作 |
connection failed: error sending request | 网络无法访问目标 API 服务,或 API Base URL 配置错误 | 检查网络连通性、API Base URL、服务商文档 | 确认当前网络环境允许访问目标服务;修正 Base URL 和 Key |
| 模型不受支持 | 当前 API 服务不支持所选模型 | 查看服务商支持的模型列表 | 切换到服务商支持的模型名 |
| Python 依赖安装失败 | pip 源不稳定或环境冲突 | 查看 pip 报错信息 | 使用镜像源或创建新的虚拟环境 |
| 图中中文乱码 | 系统缺少中文字体,或 matplotlib 未识别 | 执行fc-list :lang=zh查看已安装字体 | 安装中文字体并删除 matplotlib 字体缓存 |
| SVG 在别人电脑上字体不一致 | SVG 未嵌入字体 | 检查本机字体 | 统一使用常见字体,或转 PDF 前嵌入字体 |
| Codex 反复修改但图片仍不对 | 需求描述太模糊 | 检查 FIGURE_SPEC.md 是否缺少输出路径、图型、字体等约束 | 增加验收标准,明确“输出到哪个目录”“使用什么图型” |
| 批量任务中途卡住 | 单张图报错导致循环中断 | 查看日志定位卡住的输入文件 | 增加失败重试和任务日志 |
10. 最佳实践与使用建议
第一,先小数据小任务验证链路。不要一上来就让 Codex 生成十张大图。先跑通一张 30 行数据的箱线图,再扩展到真实数据集。
第二,把需求写进FIGURE_SPEC.md。文字描述越具体,AI 返工越少。验收标准比形容词更重要。
第三,用 Git 管理整个目录。data/、scripts/、figures/都在同一个仓库里,每次修改都能回溯。这样换期刊换配色时,只需要看 Git 历史就知道改了什么。
第四,做批量任务时先保存日志。每条处理记录都应该包含输入文件、输出文件、耗时和最终状态。失败任务要能单独重跑。
第五,图片效果必须人工复核。AI 绘图的“论文级”只代表排版、配色、字体、清晰度这些视觉维度达标,不替代统计学验证。
第六,涉及数据安全和版权时多问一句。未发表的实验数据、受版权保护的字体、别人的图表版式,都要先确认使用边界。
第七,不要为了“自动化”而跳过数据质量检查。Codex 能自动执行脚本,但不代表数据本身没有异常。出图之前先跑一遍描述性统计,比最后发现坐标轴标签错了再返工更划算。
11. 总结与下一步
Codex + Nature Figure 这套方案最值得尝试的一点,是把“论文配图”从一次性手动操作变成了可以批量复用的工程流程。你真正需要具备的能力不是记住每个 matplotlib 参数,而是能把图表需求说清楚,并且会做最终质量验收。
最先值得验证的功能,是“报错自动修复”这条链路。只要 Codex 能在脚本报错后自己定位问题并修改,后面的批量任务和流程复用才真正有价值。
最容易踩的三个坑:第一,提示词太模糊,导致 AI 反复改样式;第二,中文字体乱码,需要在系统里安装字体并清理 matplotlib 缓存;第三,网络或 API 服务配置不正确,导致连接失败。这三类问题在上面的排查表里都能找到对应处理方式。
如果这套流程跑顺了,下一步可以试着把更多科研环节接进来,比如自动读取论文摘要生成图表描述、把常用统计检验封装成统一接口、按目标期刊的投稿格式自动导出图片组件。核心思路始终是:把繁琐、重复、规则清晰的绘图过程交给自动化,把判断数据真实性和结果意义的责任留在自己身上。