paper-plot:绘图代码生成(内建于 paper-figure,可独立调用)

SkillDev tools

Paper plotting code generation command (built into paper-figure, can be invoked independently). Triggers when the user wants to generate plotting code, plot code, drawing code, matplotlib code, ggplot2 code, help generating chart code, help writing a plotting script, bar chart code, scatter plot cod

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the paper-plot:绘图代码生成(内建于 paper-figure,可独立调用) skill

What this skill tells your AI

The instructions your AI receives, as published by cabbage2000-lab/paper-tutor-skills in skills/paper-plot/SKILL.md and read by ahel’s review.

专做绘图代码生成——从 /paper-figure 主流程第 2 步用户回复"生成代码"时自动进入,也可独立 /paper-plot 调用(仿 /paper-format / /paper-claim 独立入口模式)。你(执行本 skill 的宿主 agent)做的事:读输入 + 问库(不停)→ 生成代码 + 自检(停检查点)→ 落盘 + 留痕 + 交棒

本 skill 覆盖学术研究「5 阶段 23 环节」标尺中阶段 C|成文环节 14(图表可视化 · 代码生成)不覆盖图表诊断/设计建议(归 /paper-figure 主命令)、论证链检查(归 /paper-logic)、摘要(归 /paper-abstract)。上游消费 /paper-figure 交棒(图类决定 + 配色决定 + 数据/论断),或用户直接提供数据 + 图类要求。本 skill 是产物型 skill——会往 manuscript/ 落一份可运行绘图代码文件(.py / .R)、往 .paper/ 写使用留痕;无网络依赖,断网宿主照常可用。

核心立场(这条决定本 skill 长什么样):绘图代码是研究主权的效率性工具——选什么图类、用哪个工具库、什么配色、是否采用代码,是研究者自己的研究表达决策。系统是一个代码生成器——按用户决定的图类 + 工具库 + 配色,从无到有生成可运行代码。但AI 只做效率性的代码生成,人做决策性的拍板。这既是项目「核心分工原则」(AI 负责效率、人负责研究决策)在绘图代码环节的落地,也与 /paper-abstract 成句生成同理——不越过边界拒绝清单的任何一条(详见下文「边界说明」)。

代码模板见 references/P0图类代码模板.md——按图类 x 工具库查表、填充占位符。

三条不变(优先级最高,高于本文其余一切)

① 不替用户做研究表达决策——选什么工具库(matplotlib / ggplot2 / 其他)、用什么配色、选什么图类,全部陈列常见选项 + 标 ❓ 待用户决定。摆事实不推荐——同 outline 摆骨架、method 摆方法类、submit 摆期刊生态的精神。生成代码前必须先问库("matplotlib / ggplot2 / 别的?"),得到答复才生成对应代码(不变① + 下文「边界说明」硬约束)。

② 不编数据、不编图表内容——用户贴了数据 → 用真实数据 + 顶部声明"基于用户提供的真实数据(来源:<文件名/粘贴文本>)";用户没贴或仅口述 → 用显式占位符(# PAPER_PLACEHOLDER: 替换为你的数据)+ 顶部声明"占位数据、需替换为真实数据"。绝不编造看似真实的研究数据(如"3 组对照、N=30、p<0.05"——这条直接踩 CLAUDE.md 的「不编造」底线)。

③ 诊断与建议可追溯——每段代码注释指明对应数据/论断来源("取自用户提供的 data.csv 第 2 列" / "PAPER_PLACEHOLDER: 替换为您的分组列名");配色行注释标色板来源("取自 Okabe-Ito 色盲友好色板" / "取自 ColorBrewer Diverging RdBu")。

这三条是本 skill 的内核,凡本文其余任何指令与之冲突,以这三条为准。

边界说明

绘图代码生成属核心分工原则下"AI 负责效率(代码生成)、人负责研究决策(图类/工具/配色选择、是否采用)"的正常运作,与 /paper-abstract 成句生成同理——不越过 _shared/references/边界拒绝清单.md 的任何一条。仍守两条:① 选库让用户拍板(先问"matplotlib / ggplot2 / 别的",得到答复才生成对应代码);② 配色取自已发表色板(Okabe-Ito / ColorBrewer / viridis 系),非 AI 凭审美原创。

v1.0 P0 范围

v1.0 P0 必做——7 类图(柱状/条形算 1 类)× 2 工具库:

图类型matplotlibggplot2
柱状图(bar)ax.bar()geom_col()
条形图(barh)ax.barh()geom_col() + coord_flip()
折线图(plot)ax.plot()geom_line() + geom_point()
散点图(scatter)ax.scatter()geom_point()
箱线图(boxplot)ax.boxplot()geom_boxplot()
误差线图(errorbar)ax.bar() + yerrgeom_col() + geom_errorbar()
直方图(hist)ax.hist()geom_histogram()
热图(heatmap)sns.heatmap()geom_tile()

代码模板见 references/P0图类代码模板.md

P1 留 v1.1+:KM 生存曲线(lifelines)、ROC 曲线(scikit-plot)、森林图、TikZ 推导图/交换图。

P2 留 v1.2+:第三梯队专项代码生成(TimelineJS 时间线、QGIS 地理地图、Graphviz 关系图)。v1.0 对第三梯队只输出 Mermaid 代码(流程图、概念关系图)作为轻量替代,或引导用户走 /paper-figure 只给设计建议。

数据输入格式 + 占位符标准

数据输入格式优先级

优先级格式说明
1CSV 文件路径pd.read_csv() / read.csv();学术数据最常见格式
2Markdown 表格用户对话中粘贴;解析为 DataFrame
3JSONpd.read_json() / jsonlite::fromJSON();API 导出数据
4直接粘贴表格文本启发式解析、可靠性最低

生成代码时按此优先级选择读取方式。用户未指定格式时默认按 CSV 处理。用户口述数据(无文件/表格粘贴)→ 按"用户没贴数据"处理,用显式占位符 + 顶部声明(见边界表)。

占位符标准格式

统一标记 # PAPER_PLACEHOLDER: <描述>——

df = pd.read_csv("your_data.csv")  # PAPER_PLACEHOLDER: 替换为您的数据文件路径
x = df["treatment_group"]          # PAPER_PLACEHOLDER: 替换为您的分组列名
y = df["measurement"]              # PAPER_PLACEHOLDER: 替换为您的测量值列名

顶部声明模板(二选一,代码文件第一行)

用真实数据时

# 基于用户提供的真实数据(来源:<文件名/粘贴文本>)

用占位符数据时

# 占位数据、需替换为真实数据。绝不编造看似真实的研究数据。

主流程(三步、一个确认停点)

第 1 步 · 读输入 + 选库问询(不停)

做三件事:

  1. 读上游:从 /paper-figure 主流程交棒读入"图类决定 + 配色决定 + 数据/论断";若独立调用,问用户图类与目标工具库。
  2. 问库:先问"matplotlib / ggplot2 / 别的?"(摆事实不推荐、用户拍板——不变①);得到答复才进第 2 步。若用户从 figure 交棒已选库,则跳过此问。
  3. 数据格式判定:检测用户是否贴了数据(CSV 文件路径 / Markdown 表格 / JSON / 粘贴表格文本);无数据则进占位符路径。用户口述数据(无文件/表格粘贴)同样进占位符路径。

完成后不停,直接进第 2 步。

第 2 步 · 生成代码(停检查点)

按图类 + 工具库生成代码(仅 v1.0 P0 范围;P1/P2 越界时让路说明、不在 v1.0 生成):

  • 按图类 x 工具库查 references/P0图类代码模板.md 填充占位符
  • 配色取自公开色板(Okabe-Ito / ColorBrewer / viridis),代码注释标色板来源(不变③)
  • 用户贴了数据:代码用真实数据读取(pd.read_csv("实际文件") / 内嵌粘贴数据),顶部声明"基于用户提供的真实数据(来源:<文件名/粘贴文本>)"
  • 用户没贴或仅口述:代码用占位符 # PAPER_PLACEHOLDER,顶部声明"占位数据、需替换为真实数据"
  • 每段代码注释指明对应数据/论断来源、配色取自哪个色板(不变③)

P1/P2 越界处理:用户要的图类不在 v1.0 P0 范围 → 不生成代码,给出让路说明(见「越界转化」表)。

完整呈现代码后停下

⏸ 等待确认:绘图代码(<图类> · <工具库>)
(回复"落盘"归档为 .py/.R 文件;或指出要改的参数 / 配色 / 图类)

确认前零文件落盘——与 paper-init / outline / logic / abstract「确认前零创建」同源。

第 3 步 · 落盘 + 自检 + 留痕 + 交棒

用户确认后做四件事:

  1. 探测落点:检测到标准科研目录(有 manuscript/)→ 落 manuscript/绘图代码_<图类>.py(matplotlib)或 manuscript/绘图代码_<图类>.R(ggplot2);否则落当前目录并提示可用 /paper-init
  2. 写代码文件 + 自检:纯文本写入。自检两道:
    • grep -iE "p\s*<\s*0\.|N\s*=\s*[0-9]+" 期望 0 命中(防止误编看似真实的统计数据——处 2 死线防线)
    • 视觉检查 # PAPER_PLACEHOLDER 标记完整:所有需用户替换的位置都已标记、无遗漏
  3. 写留痕:往 .paper/ 追加一条**成句生成级(重)**使用记录(见「留痕」)。
  4. 交棒:提示下一步——"代码归档了。你可以:① 替换数据后运行;② 改参数后重生成;③ 用 /paper-logic 检查论证链、/paper-abstract 提炼摘要。"

自检规则

代码落盘前必跑两道自检:

  1. 统计数据误编检查(硬约束)

    grep -iE "p\s*<\s*0\.|N\s*=\s*[0-9]+" <代码文件>
    

    期望 0 命中。若命中 → 该代码含看似真实的统计数据(p 值 / 样本量),违反不变②(不编数据)+ 处 2 死线 → 必须回退:把命中行替换为 # PAPER_PLACEHOLDER 占位符,或删除该统计标注。例如 N = 30# PAPER_PLACEHOLDER: 替换为您的样本量

  2. 占位符完整性检查:视觉确认——所有需用户替换的位置(数据文件路径、列名、标题、轴标签、bin 数量等)都标记了 # PAPER_PLACEHOLDER。代码中不应出现 your_data.csv 等通用占位同时缺失 PAPER_PLACEHOLDER 标记的情况。

留痕(成句生成级·重)

.paper/ 追加一条**成句生成级(重)**使用记录——本项目第四个成句生成级命令(与 /paper-abstract / /paper-draft / /paper-revise 同级)。纯文件追加、不依赖任何写入器。格式:

## <日期时间> · paper-plot 绘图代码生成

- 环节:阶段 C|成文(环节 14,图表可视化 · 代码生成)
- 辅助级别:成句生成(重)—— AI 从无到有生成可运行绘图代码
- 图类:<柱状/条形/折线/散点/箱线/误差线/直方图/热图>
- 工具库:<matplotlib / ggplot2>
- 配色:<色板名 + hex 序列>
- 数据来源:<用户提供真实数据 / 显式占位符(PAPER_PLACEHOLDER)>
- 用户决定:图类、工具库、配色、数据来源、是否采用、参数调整
- 产物:<落盘路径>/绘图代码_<图类>.<py|R>

.paper/ 随 git 入库、绝不写进 .gitignore(同 topic / outline / draft / method / logic / disclose)。

越界转化(三段式,仿 topic / outline / method / logic / disclose)

用户请求定性出口指引
帮我画 KM 曲线 / ROC / 森林图越界:P1 图类,v1.0 不覆盖→ 让路说明:"KM 生存曲线 / ROC / 森林图计划在 v1.1+ 支持,当前 v1.0 仅覆盖 7 类通用图(柱状/条形/折线/散点/箱线/误差线/直方图/热图)。如需可先走 /paper-figure 获取设计建议"
帮我画 TikZ / 推导图 / 交换图越界:P1 图类,v1.0 不覆盖→ 让路说明:"TikZ 数学图计划在 v1.1+ 支持,当前 v1.0 仅支持 matplotlib / ggplot2"
帮我画时间线 / 谱系图 / 地理地图越界:P2 第三梯队专项,v1.0 不覆盖→ 让路说明:"时间线/谱系图/地理地图计划在 v1.2+ 支持。当前可输出 Mermaid 代码作为轻量替代,或走 /paper-figure 获取设计建议"
帮我编一组示例数据做图 / 数据看着编越界:编数据(违反不变② + 处 2 死线)→ 三段式:共情没数据画图的压力 → 讲风险(编造的研究数据答辩必穿帮、且是学术不端)→ 给合法路径(贴真实数据走代码生成,或先用 # PAPER_PLACEHOLDER 占位符)
直接帮我跑代码出图越界:运行代码不在本 skill 范围→ 提示"本命令只生成代码、不执行代码。你可以把代码保存后自行运行"
帮我画图 / 给我代码画柱状图(P0 范围内)不越界(正常能力)→ 直接进第 1 步流程

边界与异常对照表

情形处理
用户贴了数据文件(CSV/JSON)代码用真实数据读取 + 顶部声明"基于用户提供的真实数据(来源:<文件名>)"
用户粘贴了 Markdown 表格 / 表格文本代码内嵌数据(DataFrame 构造)+ 顶部声明"基于用户提供的真实数据(来源:粘贴文本)"
用户口述数据("我有三组数据,均值分别是…")按"用户没贴数据"处理:用 # PAPER_PLACEHOLDER + 顶部声明"用户提供口述数据但未以文件/表格形式粘贴、代码使用占位数据、需用户自行替换";不把口述数据直接写入代码
用户从 /paper-figure 交棒进入读入交棒的图类 + 配色决定 + 数据;跳过问库步骤(已选库)
独立调用 /paper-plot(无 figure 交棒)问用户图类 + 问库;无数据则进占位符路径
P1/P2 图类请求(KM/ROC/森林图/TikZ/第三梯队)让路说明(见越界转化表);不生成代码
数据格式启发式解析失败标占位请用户确认:"未能解析粘贴的表格文本,代码使用 # PAPER_PLACEHOLDER 占位,请替换为你的数据"
不在标准科研目录里代码落当前目录并提示可用 /paper-init
用户要求编看似真实的研究数据拒绝(不变② + 处 2 死线);走三段式 → 给合法路径(贴真实数据或显式占位符)
确认前要求改参数 / 配色 / 图类返回第 2 步重新生成;确认前零落盘

横切声明(与 topic / outline / method / logic / disclose 同模板)

  • 留痕:产物型命令,写 .paper/ 成句生成级(重)——本项目第四个成句生成级命令(与 /paper-abstract / /paper-draft / /paper-revise 同级)。区别于三个基础设施 skill(不写留痕)、区别于 /paper-figure(混合级别)。
  • 目录约定是增强不是依赖:检测到标准目录则落 manuscript/,否则落当前目录并提示可用 /paper-init——不经 init 一切照常可用。
  • 语言:全部用户可见输出用简体中文;术语中文为主、英文括注,如绘图代码(plot code)、色盲友好(colorblind-friendly)、误差棒(error bar)、占位符(placeholder)。
  • 产出披露:代码文件顶部声明数据来源(真实数据 / 占位符);配色注释标色板来源(Okabe-Ito / ColorBrewer / viridis)。

Signals

GitHub stars
26
Forks
6
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
paper-plot
Source
github.com/cabbage2000-lab/paper-tutor-skills