免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

用Codex高效绘制数学建模论文图表:从数据清洗到论文级美化

用Codex高效绘制数学建模论文图表:从数据清洗到论文级美化 先说结论如果你正在准备数学建模竞赛又被论文里一摞图表搞到凌晨三点还在调坐标轴那 Codex 值得你花一小时认真试一下。我用它画 2023 国赛 C 题蔬菜类商品的自动定价与补货决策的图表时从数据清洗到论文插图整个流程比手搓 matplotlib 舒服太多了。这篇文章不是 Codex 的官方文档翻译而是一次完整实战复盘为什么用 Codex、怎么装、C 题到底要画哪些图、怎么把图从“能看”调到“能放进论文”最后再把我踩过的坑全部交代干净。适合所有想用 AI 辅助建模绘图、又怕被工具反噬的同学参考。1. 为什么我用 Codex 画论文图而不是继续手搓 matplotlib1.1 Codex 到底是个什么工具Codex 是 OpenAI 出的一个命令行编程智能体属于当下很热门的 agent 类工具。你给它一句自然语言任务比如“把 data 文件夹里的销售数据按品类聚合画一张按月销量折线图中文标签保存到 figs 目录”它会自己写代码、运行代码、看报错信息然后继续改到通过为止。整个过程中你可以像使唤一个实习生一样跟它对话也可以随时打断它、纠正它。数学建模竞赛里我们常用的绘图方式无非三种一是 Excel 直接插入图表适合快速但丑几乎不进论文二是 Python matplotlib / seaborn 手写代码灵活但调试耗时三是 Origin、GraphPad 这类专业软件功能强但处理大数据集时反而麻烦。Codex 本质上是把第二种方式的“写代码、查文档、改 bug”这个环节自动化了让你把精力留在赛题分析和结果解释上。对我来说Codex 最大的价值不是“能画图”而是“能理解画图意图”。建模论文里的图表往往需要反复调整坐标轴范围、图例位置、字体大小、配色风格、标注显著性。手写代码时每改一处都要重新跑一遍、看效果、再改一个图磨半小时是常事。Codex 模式下你只需要说“把中文字体设为黑体去掉上边框和右边框图例放左上角输出 300 DPI 的 PNG”它会在几秒内完成修改。1.2 数学建模绘图这件事痛点到底在哪参加过数学建模国赛的同学应该都有体会三天的比赛时间真正留给画图的时间可能只有半天但论文里对图片质量的要求又特别高。每年评阅规则里都会强调“图表清晰、信息完整、排版规范”一张模糊的、缺单位、缺图题的图很可能直接影响评阅体验。我整理过建模绘图的几个典型痛点数据格式乱附件里经常是多个 Sheet、多张表日期是文本、销量是对象类型直接拿原始表画图必报错。中文字体崩matplotlib 默认字体不支持中文出来的图全是方框不设置rcParams根本没法用。坐标系和单位不规范坐标轴没有标签刻度密度不合理图上没有标题和数据来源说明。迭代效率低特征工程、模型调参导致的多次重跑使得同样一张图要连续改七八版。这些问题 Codex 都能解决一部分尤其是“数据格式乱”和“中文字体崩”这种重复性高、又特别消耗耐心的工作交给它会非常划算。不过我要提前打个预防针Codex 不是你扔一句“帮我画张图”就能拿高分图的它需要你会提需求。换句话说你脑子里必须先有这张图的草图Codex 只是把你的意图最快变成成品。1.3 Codex 适合解决绘图流程里的哪些环节结合我自己的使用经验Codex 在建模绘图里的优势场景很明确数据探索阶段快速画出所有变量的分布图、相关性热力图、时间序列总览帮你建立对赛题数据的直觉。批量出图阶段同一套分析逻辑套用到不同品类、不同时间段Codex 可以批量产出几十张图。论文精修阶段把图导出成 PDF 或高分辨率 PNG调整字体统一、尺寸规范、配色统一。不太适合的场景也有比如你完全不知道自己要画什么指望 Codex 帮你想清楚赛题思路这是一个误区。Codex 能帮你画图但不能替你做建模决策。你要先知道“我想表达什么”它才能把“怎么表达”这件事做好。2. 上手准备把 Codex 装好并跑通一次绘图2.1 安装前的环境准备Codex 目前是一个命令行工具我用的环境是 macOS但它在 Windows 和 Linux 上也能跑。安装之前确保你的电脑满足两个基本条件Node.js 18 或更高版本Codex 本体是 npm 包需要 Node 运行时。Python 3.9 或更高版本因为我们画图的主体是 matplotlib建议顺手装好 pandas、numpy、seaborn。检查 Node 和 Python 版本很简单终端里跑node -v python --version如果你还没装 Node去 Node 官网下一个 LTS 版本安装即可不展开。Python 环境我推荐直接用 Anaconda 或 Miniconda因为建模需要的库基本都预装了省得后期一堆依赖冲突。2.2 最简安装与登录Codex 的安装命令非常短用 npm 全局安装npm install -g openai/codex安装完成后在终端输入codex回车会进入初始化流程核心是登录账号并完成授权。按终端里的提示操作就行登录成功后会生成一个会话你可以在里面直接输入任务描述。还有一个细节Codex 默认会执行它生成的 shell 命令所以第一次运行某个命令时它会弹出确认提醒问你是否允许执行。我一般直接选“允许本次”后面它跑起来会顺畅很多。如果你用的是国内模型服务商的 OpenAI 兼容接口也可以在~/.codex/config.toml里单独指定模型提供方和接口地址这样 Codex 就能用你更熟悉的模型来跑任务。提示Codex 本质上是一个“能碰你文件系统”的编程智能体建议在专门的建模项目目录里使用不要直接在系统根目录或重要项目里随便跑防止它一顿操作把文件改坏。2.3 用命令行把第一张图画出来装完之后我先在一个空目录里放了一个测试数据文件test.csv里面就是几行模拟数据category,month,sales 叶菜类,2023-01,120 叶菜类,2023-02,98 茄果类,2023-01,80 茄果类,2023-02,110然后我在终端里进入这个目录输入codex在交互界面里直接跟它说“读取 test.csv用 matplotlib 画一张各品类月度销量折线图中文字体用 SimHei保存成 figs/test_trend.png。”Codex 开始干活后会先读取文件内容然后写一段 Python 脚本运行如果报错它会看到错误信息并自动修改。大概一两分钟后它就返回了“图片已保存”的提示。我打开figs/test_trend.png发现图已经画好了坐标轴、图例、标题都正常中文没有乱码。这一张图跑通Codex 绘图的基础链路就算建立了。接下来就可以进入正题开始处理 2023 国赛 C 题。3. 2023 国赛 C 题到底要画哪些图从赛题出发拆绘图任务3.1 C 题背景与核心数据2023 年高教社杯全国大学生数学建模竞赛的 C 题是“蔬菜类商品的自动定价与补货决策问题”。背景是生鲜商超里蔬菜保鲜期短商家需要在凌晨补货时根据历史销售数据判断第二天进多少货、定什么价既要减少损耗又要最大化利润。题目给出的数据大致包括蔬菜各品类的销售流水明细销售日期、商品编码、商品名称、销售量、销售单价等信息、批发价格、损耗率以及对应的商品分类信息。年份跨度我记得是 2020 年 7 月到 2023 年 6 月数据量不算小处理时需要按日期、品类做聚合。比赛的问题链路很清晰第一问分析各品类和单品的销售总量、销售总额的分布规律及相互关系同时分析品类销售总量与成本加成定价之间的关系。第二问给出各蔬菜品类未来一周的日补货总量和定价策略。第三问在预测基础上把补货和定价细化到单品层面给出完整方案。第四问结合分析提出改进建议。从这个任务链可以看出C 题本质上是一道“数据描述 → 规律挖掘 → 预测优化 → 决策建议”的综合题。图表的任务也就非常明确你要通过图把数据规律、模型结果、决策方案呈现给评阅老师。3.2 论文里真正能用得上的图赛题论文里不是图越多越好而是每张图都要有明确的信息指向。我结合 C 题的数据结构和评阅偏好整理了这样一份“图表清单”图表类型用在赛题第几问要表达的信息各品类月度销量趋势折线图第一问销量整体变化规律、季节性各品类销售额占比饼图或堆叠柱状图第一问品类结构分布销量与价格相关性散点图/热力图第一问价格对销量的影响关系各品类损耗率对比图第一问损耗结构差异未来一周销量预测曲线图第二问预测模型的拟合效果补货量与定价策略对比图第三问优化前后的利润或损耗对比灵敏度分析折线图第三问参数变化对决策结果的影响这个清单不是绝对的但基本覆盖了 C 题论文的插图需求。有了这个清单你在用 Codex 的时候就不再是“乱画一通”而是按图索骥一张一张补齐。3.3 先建一个规范的绘图工作目录建模比赛时间紧张目录乱了会直接拉低效率。我在动手分析之前先把项目目录收拾清楚Codex 跑起来也会少很多困惑。一个典型结构是c_2023_codex/ ├── data/ │ ├── raw/ # 原始附件 │ └── processed/ # 清洗后的数据 ├── scripts/ # Codex 自动生成的代码 ├── figs/ # 最终论文用图 └── explore/ # 临时探索脚本给 Codex 下指令时我通常会明确告诉它“读取data/processed/sales_clean.csv输出到figs/”。路径越明确它出错越少。很多人觉得 Codex 会找文件其实它只是根据你的描述主动去探索但目录规范能大幅减少它找错文件、写错路径的概率。4. Codex 绘图实战从数据到图表全流程4.1 让 Codex 先把数据摸清楚拿到赛题附件后我不急着画图先让 Codex 做一轮“数据体检”。这一步非常重要因为后续所有图表的正确性都建立在数据清洗之上。我当时的指令大概是这样的“读取 data/raw 下的销售流水文件检查字段名、数据类型、缺失值、日期范围把日期统一成 datetime 类型销售量和销售单价转成数值类型按 商品编码、销售日期、品类 几个字段输出清洗后的汇总表保存为 data/processed/sales_clean.csv同时打印前 20 行数据。”注意这句话里我同时给了“读什么、做什么、输出什么、保存到哪”四个信息Codex 的执行就会非常明确。它跑完后会打印出前 20 行数据我可以快速确认字段是否正确、日期格式有没有问题、有没有离谱的缺失值。如果哪个字段被读成了对象类型我再补一句“把销售单价里的元字去掉转成 float”。这一步里Codex 比手动写代码高效的地方在于它会自动看报错、自动尝试多种读法。比如 Excel 文件里如果存在合并单元格或者多级表头手动写 pandas 读起来很烦Codex 反而会自己尝试调整参数把它读进来。4.2 按论文需求批量生成描述性图表数据清洗完成后我就开始根据前面那张“图表清单”批量出图。第一张先做“各品类月度销量趋势折线图”。我给的指令是“基于 data/processed/sales_clean.csv把销售日期按月聚合统计每个品类每月的销售总量用 matplotlib 画一张多品类折线图横轴是月份纵轴是销售总量每种品类一条线颜色要色盲友好图例放在右下角图片大小 10x5保存为 figs/category_monthly_trend.png分辨率 300 DPI。”Codex 生成的代码大致会是下面这个路子import matplotlib.pyplot as plt import pandas as pd plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei, Noto Sans CJK SC] plt.rcParams[axes.unicode_minus] False df pd.read_csv(data/processed/sales_clean.csv) df[销售日期] pd.to_datetime(df[销售日期]) df[月份] df[销售日期].dt.to_period(M) monthly df.groupby([品类, 月份], as_indexFalse)[销售数量].sum() fig, ax plt.subplots(figsize(10, 5)) for cat, grp in monthly.groupby(品类): ax.plot(grp[月份].astype(str), grp[销售数量], labelcat) ax.set_xlabel(月份) ax.set_ylabel(销售总量) ax.set_title(各品类月度销量趋势) ax.legend(loclower right) plt.xticks(rotation45) plt.tight_layout() plt.savefig(figs/category_monthly_trend.png, dpi300, bbox_inchestight) plt.close()我拿到图片后看了一眼整体没问题但横轴刻度太密标签全挤在一起。于是加一句“把横轴刻度改成每 6 个月一个标签月份标签旋转 45 度”。Codex 会很快修改并重新输出图片。第二张画“各品类销售额占比”。我让它基于销售量和单价的乘积做月度聚合然后画一张堆叠柱状图这个图在第一问里能直观展示品类结构。因为数据是 6 年的我还会让它单独截取 2022 年或者 2023 年上半年避免图太拥挤。4.3 多轮对话迭代优化图表Codex 的一个核心竞争力是“多轮迭代”。我第一次让它画图时出来的往往是“能看但不够精致”的水平需要二次甚至三次修改。比如 2023 C 题里需要画“价格与销量关系”的散点图我第一轮直接说“画一张销售单价与销售数量的散点图横轴是单价纵轴是销量点的大小表示销售金额点的颜色表示品类。”出来的图问题很明显数据点太多重叠严重几乎看不出趋势。这时候我没有重新写代码而是补充了一句“把数据按单品的平均单价和平均日销量聚合再画散点图这样点不会重叠顺便用颜色区分品类并在每个品类旁边标注品类名。”Codex 重新聚合数据后图立刻清爽了很多。后面我又加了“用浅色圆环表示每个品类的置信椭圆”它就真的用 matplotlib 的Ellipse加了一个椭圆用来展示聚类特征。这个效果在论文里看起来非常专业实际上我只花了几句话的功夫。这里有一个我很想强调的心得Codex 修改图的时候不要一次给它五六条修改意见。它会执行但如果中途有一条理解偏差整个图可能越改越乱。我一般一轮只调整一个方面比如第一轮只改字体第二轮改配色第三轮改标注这样每一步都是可控的出了问题也知道是哪一步造成的。5. 论文级图表的美化与格式规范5.1 中文字体与坐标轴规范数学建模论文几乎都是中文写的所以图里绝对不能出现乱码方框。Codex 虽然能根据指令设置中文字体但前提是你得告诉它用什么字体。不同系统可用的字体不一样我最常用的三组WindowsSimHei黑体、Microsoft YaHei微软雅黑macOSPingFang SC、Heiti SCLinuxNoto Sans CJK SC为了让 Codex 生成的所有图都统一我会在第一次绘图指令里就附带这样一句“在脚本开头设置 matplotlib 全局字体为 [SimHei, Microsoft YaHei, Noto Sans CJK SC]并禁用 Unicode 负号避免负号显示为方框。”在代码里对应的就是plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei, Noto Sans CJK SC] plt.rcParams[axes.unicode_minus] False还有一个容易被忽略的点坐标轴的刻度数量。默认情况下 matplotlib 会自己选刻度但建模论文里我往往希望横轴是具体的年份月份纵轴是明确的数值区间这时候直接用plt.xticks()或ax.set_xticks()指定刻度列表。Codex 下指令时你就说“横轴刻度设置为 2020-07 到 2023-06 每半年一个刻度”它会帮你排好。5.2 导出尺寸与格式国赛论文通常要求提交 PDF 或 Word 版本图片清不清楚直接影响打印和评阅。我个人对于论文插图有两条硬性标准分辨率不低于 300 DPI重要图片建议 600 DPI。优先保存 PDF 或 SVG 矢量格式方便后续排版放大缩小不失真。用 Codex 批量出图时我会在指令里直接要求同时导出两种格式“图片尺寸 8x4 英寸保存为 figs/figure_name.pngdpi300和 figs/figure_name.pdf 两个版本。”实际跑出来之后PDF 版本我会用于最终的论文排版PNG 版本用于平时快速预览。另外bbox_inchestight这个参数建议大家要求 Codex 默认加上。它会把图表的空白边框裁掉让图片在论文里看起来更紧凑不会出现四周大片留白的情况。5.3 图表在 LaTeX 或 Word 里的最终排版图图画得好排版也不能拖后腿。我见过很多人 Codex 图都生成了结果插入 Word 的时候把 PDF 直接拖进去显示不出来或者图片被拉伸变形。我的建议是如果是 Word 排版优先插入 PNG并且图片宽度统一设置为 14 厘米左右保证版式统一。如果是 LaTeX 排版把 PDF 文件放到figs/目录用\includegraphics引入width0.85\textwidth这样比较合适。图片编号和图题保持统一格式比如“图 1 各品类月度销量趋势”图题放在图片下方居中字号比正文小一号。其实这种排版细节完全可以继续交代给 Codex比如“把这几张图都改成统一宽度、统一字号”它虽然不能直接在 Word 里操作但可以帮你重新生成符合版式需求的图片版本。总体上Codex 能解决“图好看”的问题排版“图规范”的问题还需要你自己把关。6. 高频踩坑与排查记录6.1 Codex 生成的代码有 bug 怎么办Codex 虽然会自动修 bug但偶尔也会出现“它觉得自己修好了、实际还是有问题”的情况。有一个标志性行为它反复执行同一条命令然后每次都显示相同的报错。这时候最有效的办法是打断它然后明确说“别继续执行了先分析当前代码和报错原因告诉我你打算怎么改等我说开始你再改。”这样能让 Codex 从“盲目重试”切换到“分析模式”。我实测下来把它从“行动模式”拉回“思考模式”后大部分 bug 都能被它自己定位到比如数据类型不对、列名写错、目录不存在等等。6.2 数据量大时数据读取慢、图表卡顿C 题的销售流水数据量不小如果直接让 Codex 读原始明细再逐行绘图代码跑起来会非常慢有时候一张图要卡好几分钟。我的处理办法是先把数据聚合好生成一层“分析用的中粒度数据”再让 Codex 基于聚合后的数据画图。具体来说我在数据清洗阶段就让 Codex 先生成几个中间文件sales_daily_by_category.csv按日期、品类聚合的日销量sales_monthly_by_category.csv按月份、品类聚合的月销量item_summary.csv按单品聚合的平均价格、总销量、销售额后面只要画图就基于这些 CSV画图速度从几十秒降到一两秒。Codex 跑得顺畅我有更多时间看图的含义。6.3 图片不符合论文要求时的补救技巧如果 Codex 生成的图片整体没问题但就是有些细节过不去比如单位没标、图例太小、颜色太艳不要重新画直接针对细节下指令。Codex 对“微调”类指令的响应往往比“重新画”更好。我常用的微调指令包括“把图例字号改成 9坐标轴标签字号改成 11标题字号改成 12 加粗。”“纵轴单位是‘件万’在坐标轴标签里标明。”“把边框去掉只保留左轴和下轴。”“每个柱子顶部标上具体数值保留一位小数。”一轮只给一两条改完保存打开看看再继续下一轮。这样五六个来回之后图片基本就能达到直接放进论文的水平。6.4 常见问题与排查速查表问题现象原因解决办法中文显示为方框matplotlib 缺中文字体配置在脚本里设置rcParams[font.sans-serif]负号显示为方框默认字体缺少 Unicode 负号设置axes.unicode_minus False图片模糊DPI 设置太低导出时dpi300或保存 PDF 矢量格式Codex 反复执行报错对当前 bug 死循环让它先分析再修改明确“不要重复执行”图例挡住了数据图例位置不合适指定loc或直接让图例放在图外右侧横轴日期过密刻度间隔太小指定ax.set_xticks控制刻度数量Codex 找不到文件工作目录或路径不对把数据文件和代码放在同一项目目录使用相对路径这个速查表是我用 Codex 绘图这段时间沉淀出来的最实用内容。碰到问题先查表比反复试错效率高得多。还有一个独家经验Codex 在绘图时默认生成的配色是 matplotlib 的经典配色虽然不难看但放论文里显得不够高级。我通常会让它使用一套固定色系比如“低饱和度的蓝、橙、绿、红四色”或者一句话让它是用 seaborn 的deep配色方案。统一色系之后全篇论文的图片放在一起会非常协调这个细节在评阅时很加分。最后再分享一个小技巧如果你准备在正式比赛里用 Codex 绘图我建议你在赛前先花一个晚上把自己要画的图表类型列一遍然后批量写一些“绘图 prompt 模板”。比如“读取某 CSV画某品类的销量趋势保存到某目录中文字体统一300 DPI”这些模板在比赛当天可以直接复用省下大量现场组织语言的时间。我自己在实际操作中最深的体会是Codex 不是替你画图的而是替你实现画图意图的。你对赛题理解得越透、对图表想要表达的内容越清楚Codex 给你带来的效率提升就越夸张。反过来如果脑子里的图还是糊的那 Codex 再强也画不出能用的论文图。先想清楚再让 Codex 动手这句话值得刻在比赛桌面上。
返回列表