Skill3.8k repo starsupdated 17d ago
lieflat-charts
一套模板驱动的数据可视化与报告生成 skill,既能严格从 Lupi、Basics、Glance、Maps 与 Interactive gallery 的真实实现生成 HTML 图表,也能从 12 套中英文整页报告模板生成可发布的 HTML 报告;以 Mono 为保底,能按数据语义自动选择内置彩色预设,也支持用户明确提供的自定义色板。地图仅在用户明确要求时启用,同一交付禁止混用色系。
Install in Claude Code
Copygit clone https://github.com/larashero3-dotcom/lieflat-charts ~/.claude/skills/lieflat-chartsThen start a new Claude Code session; the skill loads automatically.
Definition
SKILL.md
# Lieflat Charts — 图表品味法典 Lieflat Charts 是一套遵循 Agent Skills 格式的数据可视化与报告生成 skill,以 Mono 灰阶为保底,也会在数据语义和使用场景明确适配时自动选择一套彩色预设。本 skill 在 [moxt.ai](https://moxt.ai) 制作,支持 Lupi 编辑叙事型、Glance 快速判断型、Basics 基础编辑型、Maps 地图、Interactive 交互大图,以及 `report-catalog.md` 中的 12 套中英文整页报告模板。用户给你数据和场合,可以得到一个无需构建、双击可打开的单文件 HTML 图表或 HTML 报告。纯 SVG 图可离线运行;使用 Chart.js、ECharts、地图 GeoJSON 或在线字体的图,在未内联依赖时需要联网。**默认输出是图表,不是报告:只给数据、说“可视化 / 分析数据 / 做几张图”或没有明确交付形式时,必须进入图表模式;只有用户明确要求“报告 / 年报 / 月报 / 白皮书 / 调研一页纸 / 海报 / brief / notebook / dashboard 报告”等完整叙事交付时,才进入报告模式。** 图表模式下**必须先从 Lupi Editorial 和 Lupi Basics 中选型;只有两者都没有合适模板,或用户明确要求 Glance / dashboard / 三秒快读时,才允许使用 Glance。Maps 只有在用户明确说要地图或地域分布时才启用。** 颜色无需用户显式触发。按第六点五节在 Mono 与 `color-presets.js` 的三套内置方案之间自动判断;用户明确给出品牌色或自定义色值时,可以建立一套交付内的 custom 色板。同一份 HTML 或同一组交付只能锁定一种色彩系统,不得混用。换肤样张在 `templates/color/`。 **怎么查一张图的参考代码**:catalog 查到图型 → 打开对应 gallery 文件 → 按卡内标题找到 `<div class="card">` 块看结构 → 在 `<script>` 里搜同名 `// ════` 注释块拿渲染代码。不要整页照抄——gallery 是多卡合页,交付给用户的永远是按第九节骨架组装的单图文件。 **目标用户是非程序员**(写作者、运营、做 PPT 的人)。他们说人话("帮我把这季度转化画一下,发公众号用"),不说图型名。你的职责是把人话翻译成正确的图,而且好看到能直接发出去。 --- ## 零、输出模式与模板优先硬约束 ### 0.1 先判输出模式 - **默认图表模式**:用户只给数据,或说“可视化这组数据 / 分析数据 / 做一张图 / 做几张图 / 做个图表页 / 做 PPT 插图”,都必须生成图表或图表页。没有报告关键词时,不得自行套用 R01–R12,也不得因为数据很丰富、结论很多或用户说“分析”就升级成报告。 - **报告模式**:只有用户明确说“生成报告 / 报告模板 / 年报 / 月报 / 白皮书 / 调研一页纸 / 海报 / brief / notebook / dashboard 报告”等完整叙事交付,才读取 `report-catalog.md`,按报告类型、内容结构、版心、密度、阅读速度和语言选择一个 R01–R12。目录里的场景只是召回线索,不是对模板的限制。 - **有歧义时仍选图表模式**:如果用户同时说了“分析”但没有明确要求报告,先交付最强单图或 2–3 张证据图;可以在文字中提示“如需完整报告可再切换”,但不能直接生成报告。 - **不要把报告模式当成“多画几张图”**。报告模板决定整页结构;页内图表仍必须遵守 `catalog.md` 和本文件的图表规则。 - 报告模板提供 `.zh.html` 与 `.en.html` 两个版本。用户没有指定语言时,跟随输入语言;中英文内容不能混在同一版本中。 以下规则不是建议,违反任意一条都必须返工: 1. **必须从仓库模板生成。** 每张成品图先在 `catalog.md` 锁定图型编号,再打开对应 gallery 的真实实现:Lupi 使用 `templates/lupi-gallery.html`,基础型使用 `templates/basics-gallery.html`,Glance 使用 `templates/glance-gallery.html`,地图使用 `templates/maps-gallery.html`,交互大图使用 `templates/big-*.html`。彩色图仍以这些原版模板为结构正本,`templates/color/` 只用于查配色。 2. **必须沿用所选模板的代码骨架。** 从卡内标题对应的 `<div class="card">` 和同名 `// ════ 图型名 ════` 注释块出发,保留其核心 SVG / Canvas / ECharts 结构、数据编码方式、比例关系和动画节奏。允许替换数据、标题、旁注、来源与必要布局;禁止脱离模板另画一张“看起来差不多”的图,禁止拼接多个模板造混合图型,禁止退回图表库默认样式。 3. **默认选型顺序固定。** 先完整比较 Lupi Editorial(L1–L20),再比较 Lupi Basics(F1–F17)。只要其中存在能诚实承载数据、容纳标签且可读的模板,就必须从这两组中选择。Maps 不进入这条默认链,只有用户明确要求地图时才单独检查。 3.1 **两组之内还分主力与后备。** 主力是 **L1–L15 与 F1–F13**,默认从这里出图。后备是 **L16–L20、F14–F17、G19–G22**:只有主力里没有能诚实编码这份数据的模板时才用,且必须写明主力的哪几张、因为什么不适配。理由不得只写“新图更好看”或“更专业”。唯一例外见第 3.2 条。 3.2 **五种数据形状允许直接用后备图,不必先证伪主力。** 因为主力里不存在对应的诚实编码,硬套只会画出错的图:OHLC 四值行情 → F17 Candlestick;五数概括 + 异常值 → F15 Tick Box;同一实体跨 3–6 个连续维度 → L20 Parallel Coordinates;整年 52 周 × 7 天日期热力 → L17 Calendar Heat;多系列构成随连续时间变化且要同时看总量 → F16 Stream Ribbon。除这五种,后备图一律走 3.1 条。 4. **Glance 是默认降级方案,不是并列首选。** 只有 Lupi Editorial 与 Lupi Basics 都不适配,或用户明确要求 Glance、dashboard、监控、周报、三秒快读时,才使用 Glance。降级前必须写明 Lupi / Basics 不适配的具体原因。 5. **库外新造是最后手段。** Lupi、Basics、Glance 和交互模板都无法承载时,才能走第六节翻译流程;新图仍必须继承最接近 gallery 模板的视觉语法和代码结构。 ## 一、工作流程(每次请求都走这六步) 1. **判数据形状。** 别问用户要什么图,看他的数据长什么样:几个类目的比较?带时间的序列?占比?带正负?多对一归属?网络?逐条记录的分布?形状是选图的主键。 2. **先审计主力,再考虑后备。** 按数据形状先扫描主力 L1–L15 与 F1–F13 的候选,至少比较 3 个;不足 3 个就列出全部。比较语义契合、单位诚实、标签容纳、阅读速度、叙事张力和本批次是否重复。主力全部不适配时,才扫描后备 L16–L20 / F14–F17,并写明主力哪几张为什么不行(第零节 3.1)。数据形状命中第零节 3.2 那五种时,直接用对应后备图。 3. **必要时才检查 Glance。** 只有 Lupi 与 Basics 候选全部失败,或用户明确要求 Glance / dashboard / 监控 / 周报 / 三秒快读,才扫描 Glance(G1–G22)。选择 Glance 时记录为什么 Lupi 与 Basics 无法承载,不得只写“Glance 更直观”。用户明确要求地图时跳到 Maps(M1–M2),不把地图混入普通候选。 4. **锁定真实模板,再组织整页。** 每张图必须记录体系、图型编号、gallery 文件和卡内标题,并以该卡的真实结构与渲染代码为骨架。禁止先想好“这一页要讲六件事”,再临时发明图型;整页叙事只能在模板锁定之后组织。 5. **按图数规则组成批次。** 一张图只承担一个独立结论;去掉重复结论后,再按第 1.2 节的默认区间决定数量。模板需要全局分配:不重复、不堆同一种轮廓、不为了凑数硬加图。 6. **按模板渲染并自检**(第零、二、三、八节)。逐项核对成品是否仍能对应到所选 gallery 实现;不能因为改数据而换掉模板的核心几何、编码或动效。按第六点五节为整份交付选择 Mono 或一套彩色预设;库外图型走翻译流程(第六节)。 ### 1.1 报告模式工作流 1. 读取 `report-catalog.md`,至少比较 3 个报告候选并记录淘汰理由。按内容结构、信息密度、版心和阅读速度选模板,不把模板名称当成行业限制;例如“旅行手记”也可以承载运动或个人生活数据,“月度运营”也可以承载财报或业务数据报告。 2. 锁定一个语言版本和一个报告模板文件;不得拼接两个报告模板的版式。 3. 先提炼整页的主结论、证据结论、上下文说明和来源,再把它们分配到模板已有的标题、导语、KPI、图表、旁注和结尾槽位。 4. 每个图表槽位单独按 `catalog.md` 选型,优先复用 Lupi / Basics 的真实实现;报告模板的布局不能成为绕过图表数据契约的理由。 5. 复制对应报告模板的整份 HTML 作为起点,只替换数据、文案、来源、图例、语言和必要模块。不得保留演示数据、演示来源、Moxt 链接或模板原始结论。 6. 报告页的色彩系统锁定为模板当前色系;如用户明确要求改色,整页统一替换为 Mono、单一内置预设或完整 custom 色板,不得局部混搭。 7. 报告模式的交付前额外检查:版心尺寸未漂移、章节顺序仍成立、页内图表数量有证据支撑、定尺模板没有溢出、中文字体和英文 fallback 可读。 ### 1.2 图数规则 图的数量由**独立结论数**决定,不由“有多少数据列”决定,也不固定要求 5 张或 6 张: | 请求类型 | 默认成品数量 | 规则 | |---|---:|---| | 单个问题 / 单张表 / 一个指标 | 1 | 只交付最强的一张,不为了展示模板而扩展 | | 两到三个明确结论 | 2–3 | 每张图承担一个不同结论,可共享同一数据源 | | 一篇文章、论文或完整案例 | 4–6 | 覆盖总览、构成、比较、关系或变化等不同数据形状 | | 用户明确要求数量 | 按用户要求 | 仍然删除重复图;不足以支撑时说明并少做 | - 默认单页上限为 **6 张**;超过 6 张就拆成多页或按章节交付。 - 候选方案、Glance/Lupi 对照稿不计入最终图数;它们是选择过程,不是成品批次。 - 一页多图至少保留一个总览结论,其余图必须提供新的比较维度、关系、时间变化或细节证据。 - 如果两个图表达同一个结论,只保留阅读场合更合适、数据契约更诚实的一张。 ## 二、Mono 语法 · 硬规则(违反即返工) 默认引用 `mono-tokens.js`(开源分发时把内容内联进 HTML)。与 token 冲突的取值一律以 token 为准。走彩色时只替换颜色 token,字体、圆角、布局和动画仍以 `mono-tokens.js` 为准。 **颜色** - 默认只有纸灰 `#F0EFEB` 和炭黑 `#1C1C1A` 两极,中间 7 级灰阶 ladder。彩色例外按第六点五节从预设起步。 - **明度即数据**:最重要 = 最黑(暗卡上反转为最亮)。多系列按重要性沿 ladder 分配,不按顺序随便拿。 - **一律实心**:不透明材质、不发光、不渐变滤镜、无阴影。质感全靠明度对比和形状。唯一例外:叠加型图(Radial Patchwork)里透明度本身编码密度——那是数据,不是装饰。 - 暗卡(`.card.dark`)只给两种图:必须暗底衬托的形(花瓣、发光感丝线/网络)。默认浅卡;每屏(4 卡)最多 1 张暗卡。 **排版** - Inter 全家。标题 700 / 图内数值 800 / 轴标签 600。卡片结构固定四件套:结论式标题(h2)+ 副标题(图例和时间范围写在这里,用 `·` 分隔)+ 图 + 来源行(全大写、加字距)。 - 标题写结论不写图型名:"Revenue by plan" 可以,"柱状图" 不行;更好的是带判断的:"Where we gained, where we bled"。 - SVG 最小字号:半宽卡 6.5px、通栏 5.5px。装不下的信息改 hover 出,不许缩小字号硬塞。 **形状** - 卡片圆角 24px,无边框无阴影,靠留白分卡。柱端胶囊圆角(竖柱圆上端、横柱圆外端)。 - **柱状图不断轴。** 柱的契约是长度∝数值,断轴毁契约。极端值场景的正确做法:①让极端值冲天(最诚实)②主图+放大镜小图 ③撕柱不撕轴(明说画不下)。 - 花瓣皮(粗黑缝+圆角扇瓣)只适用等分或近似等分的径向图。宽窄悬殊的扇区会相互遮蔽,降低可读性。 **动画** - 入场动画默认开,`quarticOut` 快进快停,不弹跳(波浪入场可用 elasticOut)。点阵 stagger 8–15ms/个,条形 80–130ms/根。 - 统一 reveal 机制:滚入视野才播 + 点击重播(用 token 里的 `obsReveal`,带 timer 清理)。 - 必须带 `prefers-reduced-motion` 降级(token 的 CSS 已含)。 - **动画不可优于结构**:一个效果如果需要发明新布局才能安放,不配存在(effectScatter 教训)。 **数据** - 演示数据用 token 的 `rnd(i,k)` 确定性伪随机,禁用 `Math.rand