资讯动态

用Codex高效绘制数学建模论文图表:以2023国赛C题为例

发布时间:2026/9/13 6:11:46 来源:尧图企业网站定制
全国大学生数学建模竞赛的论文成绩很大程度等于“图表观感分”。尤其像 2023 年国赛 C 题“蔬菜类商品的自动定价与补货决策”这类数据分析题评委拿到论文第一眼看的不是公式推导而是图是否清晰、是否规范、能不能一眼看懂结论。这里直接以这个赛题为例讲一套用 Codex 给建模论文画图的完整工作流。Codex 不是画图软件它是一名跑在终端里的 AI 编程助手能读懂你给的数据、自动写 Python 绘图脚本、执行完再把图交给你。对三天三夜的比赛来说这相当于多了一个只会写代码和改代码的队友帮你把最枯燥的绘图环节提速。适合谁看今年准备国赛、美赛的队伍平时用 matplotlib 但觉得调图费劲的同学以及任何需要批量生成数据图表的科研人员。下面从最前面的准备工作开始说起。1. 为什么数学建模论文绘图需要 Codex1.1 建模论文绘图的经典痛点数学建模比赛真正留给画图的时间并不多。以国赛 C 题为例第一天基本在做数据清洗和探索性分析第二天上午还在调模型真正到了写论文的时候论文要的图可能还一张都没画。这个时候最常见的操作是打开 Python 或 Excel手动做图。算算待办事项数据探索图至少五六张模型结果图三四张还有流程图、方案图、示意图。如果每张图都要手工调整坐标轴标签、图例位置、配色方案一两个小时就没了。更麻烦的是评委非常在意图表的一致性。所有图的字体、线宽、配色必须风格统一否则论文会显得非常“拼凑”。我见过不少队伍模型做得挺好结果折线图用的是 matplotlib 默认样式柱状图却是 Excel 截图热力图又是另一个测色板三张图放同一页观感立即掉一个档次。比赛不是作图比赛但图纸质量确实会影响最终成绩。1.2 Codex 到底能帮你做什么Codex 是 OpenAI 推出的命令行编程智能体。你把它安装到电脑上在项目目录里敲一句codex它就能进入一个对话工作区。你可以直接告诉它“读取某个 CSV 文件按品类汇总销量画折线图保存成 PNG”。它会自动生成 Python 脚本并运行出现报错它会自己看日志、自己修跑通之后把结果告诉你。这个能力用在绘图上非常舒服因为画图的本质就是“描述需求 - 编写代码 - 运行查看 - 调整再运行”的循环而 Codex 天然擅长这个循环。最关键的一点是你用自然语言表达目标不需要死记 matplotlib 的每个参数。遇到复杂需求比如“把 2023 年 9 月之后的数据高亮”“加上周末的阴影区域”“图例放到图外”只需要像聊天一样说出来Codex 就会改代码重新生成。这种流畅的迭代体验比百度搜代码、复制粘贴、再改参数高效得多。1.3 为什么拿 2023 国赛 C 题当案例2023 年 C 题是典型的数据分析加决策优化题。附件给了某商超连续几个月的蔬菜销售明细和批发价格要求分析不同蔬菜品类、单品的销售规律探索销量和定价之间的关系并给出自动定价与补货策略。这个题目天生需要大量图表数据探索需要散点图、热力图、时序图建模之后需要拟合曲线图、预测对比图、误差分析图最后的决策建议还需要柱状图等。而且这个题目的数据字段不复杂很适合用来演示一套可复用的绘图流程。更现实的原因是公开数据集好复现你不需要为了“喂数据给 Codex”做太多额外工作正好能把精力放在提示词和样式控制上。等这套流程跑顺了换成美赛的题目或者你自己科研里的实验数据思路是完全一样的。2. 动手之前Codex 环境准备与核心概念2.1 Codex 的安装与登录先说安装。Codex 官方提供 npm 包前提是电脑上装了 Node.js。装好之后在终端里执行npm install -g openai/codex安装完成后在想要工作的目录里输入codex第一次会引导你完成登录或配置访问凭证。我个人的建议是提前把凭证配置好不要在比赛当天临时折腾账号。Codex 的运行依赖网络连接需要访问模型服务所以比赛前就要确认开发环境能正常访问相关服务。如果你所在环境无法使用官方账号或者有成本方面的考虑社区里也有把 Codex 接到其他兼容大模型服务的做法具体配置以官方文档里的模型说明为准这里不展开。启动之后Codex 会进入交互界面下面有一个输入框。你可以直接输入任务描述。它执行命令前通常会询问是否允许运行哪些命令建议不要图省事直接给“完全自动”尤其是比赛数据需要保护建议选择需要确认的模式让它每次执行命令前都跟你打招呼。安全永远要放在第一位。2.2 绘图项目目录怎么组织画图最怕路径混乱。我建议每个建模题单独建一个目录里面再分三个子目录2023_C_question/ ├── data/ # 原始数据 ├── figures/ # 输出的图片 ├── scripts/ # Codex 生成的绘图脚本 └── prompts.md # 记录每次给 Codex 的提示词这样做的原因有两个。第一Codex 生成代码时对相对路径比较敏感把路径固定下来可以减少“文件找不到”这类低级报错。第二比赛最后一天把所有图重新生成一遍时你只需要批量运行scripts里的脚本不需要挨个手动调整。我在实践里会再加一个prompts.md文件把每张图的提示词按顺序记下来。这个东西的好处是当你发现“图 5 配色要改”直接打开笔记找到当时给 Codex 的原始描述追加一句“把主色改为深蓝”就行不用从零开始重新描述需求也不会忘记之前到底做过什么。2.3 提示词让 Codex 画出论文级图表的通用模板提示词是使用 Codex 绘图最重要的部分。我总结了一套百搭模板五要素齐全时基本不会跑偏数据来源明确文件路径、编码方式、字段含义任务目标要画什么图、横轴纵轴各是什么、是否分组或聚合计算逻辑是否需要按日期聚合、按品类分组、计算均值或相关系数视觉规范配色、字体、是否加网格、图例位置、图片大小和 dpi输出要求保存路径、格式PNG/PDF、分辨率。举个可直接套用的例子请读取 data/sales.csv文件编码为 utf-8主要字段有销售日期、品类、单品、销量、销售单价。 请按“品类”分组以销售日期为横轴、每日销量合计为纵轴绘制折线图。 要求 - 每种品类使用不同颜色线宽 2 - 设置中文字体为 SimHei坐标轴标签字号 12 - 添加网格线透明度 0.3 - 图例放在图外右上侧 - 保存到 figures/sales_trend.pngdpi300。你看这里面没有写任何一行绘图代码但 Codex 能够把这些自然语言翻译成 matplotlib 脚本。之所以强调“计算逻辑”是因为 Codex 虽然聪明但如果不说清楚是“按天求和”还是“按天求平均”它猜出来的结果很可能和论文想表达的意思对不上。视觉规范也一样你说得越细后续需要返工重画的概率越低。3. 实操用 Codex 绘制 2023 国赛 C 题核心图表3.1 数据预检与说明以 2023 年 C 题的附件为例数据通常包括销售流水表和批发价格表。销售流水表里一般有销售日期、品类名称、单品名称、销量、销售单价等字段。拿到数据的第一件事不是急着画图而是先让 Codex 帮你做一次数据预检命令大概是这样请读取 data/附件1.csv列出前 5 行数据并告诉我 1. 总共有多少行、多少列 2. 每个字段的缺失值数量 3. 销售日期的起止时间和数据连续性 4. 哪些品类的销量存在明显异常值。这一步非常值得做。比赛中最容易翻车的坑就是日期解析失败、字段名带空格、销量为负这些数据脏问题。提前把脏数据清理干净后面画图时才会顺利。Codex 把预检结果反馈给你后如果发现问题你可以继续指示“把销量为负的记录删除日期转为标准格式另存为 data/附件1_clean.csv”。这样后续所有图表都基于清洗后的数据不会出现同一张图数据前后对不上的尴尬。3.2 价格与销量关系散点图2023 年 C 题的核心任务之一是研究价格和销量的关系。所以第一张核心图我建议画一张“销售单价 vs 销量”的散点图必要时再叠加一条线性回归趋势线。给 Codex 的提示词可以这样写基于 data/附件1_clean.csv绘制销售单价横轴与销量纵轴的散点图。 要求 - 点的大小 20透明度 0.5 - 用橙色画出线性回归趋势线 - 横轴标签为“销售单价(元/千克)”纵轴标签为“销量(千克)” - 设置中文字体 SimHei - 保存为 figures/price_sales_scatter.pngdpi300。Codex 一般会生成类似这样的代码import pandas as pd import matplotlib.pyplot as plt from scipy import stats df pd.read_csv(data/附件1_clean.csv, encodingutf-8) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x df[销售单价] y df[销量] plt.scatter(x, y, s20, alpha0.5) slope, intercept, r_value, p_value, std_err stats.linregress(x, y) xs pd.Series([x.min(), x.max()]) plt.plot(xs, slope * xs intercept, colororange, linewidth2) plt.xlabel(销售单价(元/千克)) plt.ylabel(销量(千克)) plt.grid(alpha0.3) plt.savefig(figures/price_sales_scatter.png, dpi300)画出来如果散点太多、太挤可以再追加一句“对销量做 log 变换横轴保持原始价格看看分布是否更清晰”。这种微调用对话就能完成。最后不要忘了让 Codex 在图上标注相关系数比如r 0.72, p 0.01这类信息评委一眼就能看到关系强度。论文里引用时这张图能支撑起整段“价格与销量存在显著负相关”的分析。3.3 各品类销售时序折线图数据探索阶段还需要一张“各蔬菜品类每日销量走势图”。2023 年 C 题数据覆盖时间较长如果直接把所有单品画在一张图里线条多到根本没法看。比较合理的做法是先从品类层面画观察不同品类的季节性规律和异常波动。提示词可以这样写读取 data/附件1_clean.csv。 将销售日期解析为日期类型。按照“品类”和“销售日期”两个字段分组计算出每日销量总和。 绘制折线图横轴为日期纵轴为每日销量合计每个品类一条线。 要求 - 品类在 8 个以内使用色盲友好的配色方案 - 线条宽度 2.5透明度 0.9 - 图例放在图外右上角 - 中文字体 SimHei - 保存为 figures/category_trend.pngdpi300。这样的图在论文里可以直接看出部分叶菜类蔬菜销量波动大耐储存品类的销量相对平稳周末或节假日可能出现脉冲式上涨。这些都是后续建模要用到的先验信息。画完之后我一般会追问一句请检查图中有没有一条或几条线严重异常如果有把对应品类的最大和最小销量日期列出来。这一步能帮你发现数据中的“周末效应”和“节日效应”写进论文就是很有说服力的分析结论。如果某些品类线条太多我再补一句“只保留销量前 6 的品类其余合并为‘其他’”图面立刻清爽很多。3.4 预测结果对比图与残差图模型做完之后论文里必须有两类图预测值与真实值对比图、残差图。前者证明模型拟合效果后者证明误差没有明显规律。这两张图如果手写要处理时间序列对齐、置信区间填充等多个细节用 Codex 也能很快搞定。提示词示例我有训练集和测试集的销量数据文件分别是 data/train.csv 和 data/test.csv。 已经用移动平均模型预测了测试集每天的销量预测结果保存在 data/pred.csv。 请绘制一张图 1. 真实销量用黑线 2. 预测销量用蓝虚线 3. 用浅蓝色填充 95% 置信区间 4. 在验证集开始的位置画一条竖线标注“验证集开始” 5. 保存为 figures/pred_vs_actual.pngdpi300。实现时 Codex 大概率会用fill_between填充置信区间。对于论文来说这张图足以让评委快速判断模型的预测走势是否贴合真实数据。残差图也不要省直接一句“画残差图横轴为预测值纵轴为真实值减预测值并叠加 0 水平参考线”保存为figures/residual.png。残差随机分布在 0 附近说明模型没有系统性偏差如果出现明显的漏斗状或弯曲形状说明模型还有改进空间你正好可以在论文里展开分析。3.5 批量统一所有图的样式比赛写到最后最痛的问题是每张图风格不统一。有的图字号 10有的图字号 12有的有网格有的没有图例位置也各不相同。用 Codex 可以一次性解决让它在所有绘图脚本里统一加一段公共样式或者干脆生成一个style.py每个脚本都从里面导入。我常用的做法是让 Codex 在所有脚本开头强制设置import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False plt.rcParams[figure.figsize] (8, 5) plt.rcParams[font.size] 12 plt.rcParams[lines.linewidth] 2 plt.rcParams[axes.grid] True plt.rcParams[grid.alpha] 0.3 plt.rcParams[savefig.dpi] 300 plt.rcParams[savefig.bbox] tight然后指示 Codex“遍历 scripts 目录下的所有脚本把它们里面重复出现的 rcParams 设置删除统一改成导入 style.py”。这样整篇论文的图片就像出自一个人之手观感会好很多。另外提醒一句如果论文要求提交 EPS 或 PDF 矢量图在保存时用plt.savefig(xxx.pdf)即可Codex 会帮你处理好格式问题。4. 常见报错、绘图坑位与提示词迭代技巧4.1 常见报错速查表Codex 虽然能自动修很多 bug但有些问题属于环境和数据层的需要你自己排查。我把实际使用中最常见的报错整理成了一个表现象常见原因解决办法中文显示成方块matplotlib 默认字体不支持中文设置font.sans-serif[SimHei]或Microsoft YaHei日期解析报错日期字符串格式不统一用pd.to_datetime(..., errorscoerce)并指定 format图例遮挡曲线图例默认位置不理想追加提示“把图例放到图外右上角”FileNotFoundError运行路径不对或文件名不一致统一使用data/、figures/目录并检查文件是否存在图片模糊dpi 太低保存时设置dpi300或直接保存 PDF坐标轴标签乱码编码问题确保读取 CSV 时指定encodingutf-8Codex 中间报错中断单次任务太复杂把任务拆成小步骤先清洗再画图最后改样式这张表并不是标准答案它只是我踩过的坑。你实际用的时候Codex 会在终端里把报错信息显示出来你可以直接把报错贴给它说“根据这个报错修复代码”绝大多数情况下它能自己改对。4.2 我在使用 Codex 绘图时踩过的三个坑第一个坑给 Codex 的上下文太多导致输出被截断。比赛后期我把整个数据集路径、十几张图的需求一次性塞给它结果 Codex 生成代码后经常因为内容过长而没有完整写入文件。后来我改成一次只处理一张图最多两张明显稳定很多。第二个坑太相信 Codex 的图不做数据核对。有一次它生成的饼图比例和数据表对不上原因是它读文件时按“单品”去重了而我想要的是按销量汇总。从那以后每次 Codex 跑完图我都会让它顺手输出“当前图的关键统计量”比如总和、均值、最大值和图上的内容对照一下。核对后再粘贴进论文能避免评审指出数据错误这种灾难。第三个坑忘了保存中间版本。Codex 修改代码时会让脚本越来越“抽象”有几次我突然觉得改多了想退回上一个简化版本结果没有备份。所以我现在会第一时间把它生成的脚本收藏到scripts_v1、scripts_v2这样的目录里或者用 git 做版本管理。具体到比赛场景哪怕只是复制一份脚本到bak文件夹也能省去很多后悔的时间。4.3 提示词迭代的正确姿势和 Codex 对话画图千万不要把第一次生成的结果当成最终版。正确方式是先说一个相对宽泛的目标让它先跑出一版然后像带实习生一样一次提一个具体意见。比如第一次提示词只写“画 2023 年 6-10 月各品类的销量折线图”看到图之后第二次提示词写“图例太乱只保留销量前 6 的品类其余合并为‘其他’”第三次写“把 9 月第一周用浅黄色背景标出来配一句说明”。每次只改一个点Codex 不会迷糊你也能清楚看到每轮修改到底改了什么。如果一次性提七八个要求它很容易顾此失彼甚至把之前对的逻辑改坏。提示词里尽量少用模糊副词比如“好看一点”“高级一点”。Codex 对“好看”没有一致的标准。不如说“把主色换成深蓝#1f77b4去掉所有边框标题左对齐字号增大到 14”这些可执行的指令才能带来确定性输出。5. 比赛场景下的效率建议最后分享几点我实际带队伍时的体会。第一Codex 最适合做重复劳动和批量修图它不适合替你决定“哪张图该放论文里”。论文的叙事逻辑还是要人来定Codex 只是帮你把已经想好的图快速实现出来。拿 2023 年 C 题来说哪些图放在“数据探索”小节、哪些图放在“模型验证”小节这是论文结构问题Codex 管不了团队成员必须自己把图表的叙事顺序想清楚。第二绘图脚本一定要版本化。别想着比赛只有三天就不做版本管理哪怕最简单的方式也是把每次可用脚本复制到final目录标注好脚本和输出图的对应关系。到最后一天你会发现有一份能一键重跑全部图片的make_figures.py是最大的安全感来源。只要数据没有大改运行一次就能把整套图重新输出一遍省去手动打开每个文件挑图的时间。第三所有图的编号和标题最好在比赛最后一天统一生成。我会让 Codex 扫描figures目录给每张图按论文顺序加“图1”“图2”前缀并且让它的文件名直接叫图1_品类别销售趋势.png这样写论文时直接从文件管理器拖图不用反复确认哪张是哪张。因为到最后几个小时人的精力已经不太够用了这种小流程能明显降低出错率。第四个人习惯是每天结束前让 Codex 把当天做过的数据清洗、统计结果和图形都汇总成一个简短报告。这个报告不为交论文纯粹是防止第二天早上忘了前一天的思路。Codex 生成这种文本摘要的速度很快而且它能基于脚本内容来回溯比我凭记忆写靠谱太多。工具再强数学建模比到最后还是比拼对问题的理解和对结果的解释。Codex 能帮你省出大量画图、调格式的时间把这些时间砸在模型改进和论文分析上才是用工具的正确姿势。拿到 2023 年 C 题的数据集你大可以先把它丢给 Codex让它画第一版草图剩下的分析思路仍然要你自己想清楚。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价