从 Claude Code DataViz Skill 看数据形态选择:choosing-a-form 教你在配色之前先定图表形式
【免费下载链接】system_prompts_leaksExtracted system prompts from Anthropic - Claude Fable 5, Opus 5, Claude Design, Claude Code. OpenAI - ChatGPT GPT-5.6-Sol, Codex. Google - Gemini 3.5 Flash, 3.1 Pro, Antigravity. xAI - Grok, Cursor, Copilot, VS Code, Perplexity, and more. Updated regularly.项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks
在 system_prompts_leaks 仓库收录的 Claude Code 数据可视化技能(DataViz skill)中,references/choosing-a-form.md是整套作图流程的第一步:它回答"这份数据该用哪种形式呈现",并且明确了一个反直觉的原则——形态决策必须发生在配色之前,而且正确的形式有时根本不是图表。读完本篇,你将掌握一套可直接落地的形态判定法:先判断"是不是图表",再按"读者的任务"映射到具体图表类型,最后用系列数量阶梯控制分类色用量——并能把它与同技能的色板校验脚本、标记规格串联成完整的交付流程。
一、方法论定位:形态是第一步,颜色排最后
DataViz skill 的主入口 SKILL.md 把"把图做好看"改写成了七步可检查流程,其第一条就是Pick the form(选择形态),并直接指向本文档:
What is the data's job — magnitude, identity, polarity, a single headline, change-over-time? The job picks the chart type, and sometimes the answer isnot a chart.
choosing-a-form.md的开头同样立规矩:"Decide thisbeforecolor. The data's job picks the form — and sometimes the right form is not a chart."(在配色之前决定;数据的任务决定形态——有时正确的形态根本不是图表。)原文还点出了多数烂图的通病:"Most bad charts pick colors first"(多数坏图表先挑了颜色)。也就是说,这套方法把"形态"当作流程里的硬约束,而不是审美偏好。
二、第一问:它到底是不是图表?
文档的第一张决策表覆盖"数据不是图表"的四种情形。完整继承如下:
| 数据是…… | 用 | 不要用 |
|---|---|---|
| 单个当前值(也许附一个趋势) | Stat tile(数值 + 增量 + 迷你趋势线) | 单条柱状的条形图 |
| 少量 headline 数字 | KPI row(stat tile 排成一行) | 分组柱状图 |
| 一个仪表盘主打的那一个数字 | Hero figure(≥48px,无衬线) | - |
| 单个比率对比一个上限 | Meter(同一色阶的轨道) | 两片扇形的饼图 |
| 超过约 7 个都承载含义的类别 | 表格(或表格 + 图表) | 更多颜色 |
这张表在同技能其他参考文件中有明确的下游规格支撑,可以印证每条"用/不要用"背后的实现约定:
- Stat tile 有固定契约:marks-and-anatomy.md 定义其结构为
label(句子式大小写,不带尾随冒号)·value(Sans semibold,自动紧凑化:1,284 / 12.9K / $4.2M)·delta(可选;带符号、相对命名周期,颜色 = 方向 × 上升是否为好)·trend(可选;12 点 sparkline,用弱化的中性色,当前周期用强调色)。 - Meter 的轨道必须是"同一色阶的浅一级"(蓝对蓝,而非白色轨道),让状态在整个条上可读;填充承载严重度(accent → warning → danger)。
- Hero figure 每视图严格只能有一个,≥48px,且必须与全站同为无衬线字体——用 display 或衬线字体会被 anti-patterns.md 判为 "off-brand decoration"。
- 超过约 7 个有意义类别时用表格:anti-patterns 里对应条目是 "More than ~7 color classes carrying meaning",理由是 "Past ~7 bins, adjacent classes blur"(超过 7 个分箱后相邻类别开始模糊)。
值得注意的是,stat tile、hero figure 这类"数字即图表"的形式在整个流程中享有特殊豁免:interaction.md 指出,唯一可以省略 hover 层的形态是"没有绘图区的裸 stat tile"。
三、任务 → 类型映射表
如果确认"图表是对的",文档给出第二张表:按"读者必须完成的任务"选类型。完整继承:
| 任务(读者必须做什么) | 默认形式 | 颜色任务 |
|---|---|---|
| 比较大小(低 → 高) | bar / column;网格场景用heatmap | sequential(单一色相) |
| 随时间的趋势 | line;单一序列用 area | sequential 或 1 个 categorical |
| 区分不同序列 | grouped/stacked bar、多线 | categorical |
| 一个序列是重点,其余是背景 | emphasis(高亮一个,其余置灰) | 1 个色相 + 灰 |
| 高于/低于基线;相对目标的差值 | diverging bar,或 line 对比基线 | diverging |
| 部分对整体 | stacked bar(类别多/名称长时改横向) | categorical |
| 有序刻度的份额(Likert、情感、同意↔不同意) | diverging stacked bar,以中性点居中 | diverging |
| 每个条目的 之前 → 之后 | dumbbell | 1 个色相,2 个深浅 |
这张表的"颜色任务"列与 color-formula.md 的"四种工作"一一对应:categorical(身份)、sequential(幅度)、diverging(极性)、status(状态)。几个关键行的取舍逻辑值得展开:
- emphasis 行是该表里被文档自己点名为"最被低估的形式"(下一节详述)。它的颜色任务只有"1 个色相 + 灰",因此对色板的要求最低。
- diverging 行区分了两种"带中心"的场景:连续极性与有序离散份额(Likert/情感)。两者都要求中性点为灰,且两极必须"读起来相反"——参考色板 palette.md 明确记录 blue↔aqua 被否决(两者都偏冷),最终选 blue↔red 加灰色中性点。
- 部分对整体只认 stacked bar。anti-patterns 的对应条目是 "A donut/pie for comparing close values",结论是 "A bar, or the numbers. Part-to-whole at a glance only, ≤ 6 segments";components.md 也把 part-to-whole 挂在 stacked bar 上,"donut stays deprioritized"。
- 表格中"网格场景"(heatmap)对应 sequential 编码,即连续幅度:最浅一级表示"接近零",允许贴近背景色。参考实例中 sequential 默认色相为 blue,100→700 全阶见 palette.md。
四、表格背后的四条规则
文档在映射表之后给出四条元规则,它们是表的"宪法",完整继承:
- Sequential 是安全的默认值。单一色相、越多越深(one hue, more-is-darker)。它易读、一致、难以误读——除非数据的任务明确是身份(identity)或极性(polarity),否则就用它。
- Categorical 只用于"序列本身就是主角"的场景——且有真实代价:它可能淹没那个真正重要的数据点。如果故事是"这一个涨了",那是emphasis,不是 categorical。anti-patterns 把这条写成独立条目 "Eight categorical hues when the story is one number",并称其为 "The most common way a chart misses its point"(图表最常见跑题方式)。
- Emphasis = 最被低估的形式。一个序列用强调色相,其余用弱化灰。文档原话:"Often the honest answer to 'make this chart clearer.'"(对"把这张图弄得更清楚"这个要求,它常常是诚实的答案。)
- Texture 是可选表达,不是默认形式。它只在无障碍(完全色觉障碍 CVD)、打印/导出、
forced-colors场景下挣得位置,永不做装饰。文档指向marks-and-anatomy.md的 texture 小节:一种方向性手绘填充,只用45° 与其 135° 镜像(横竖方向会被读成网格线/柱条),在数值刻度上按大小有序旋转,由无障碍设置触发而非默认开启。
这四条规则解释了表格为什么长成那样:sequential 覆盖"比较大小"这类默认任务;categorical 与 emphasis 的边界由"谁才是主角"划分;diverging 独占极性任务;texture 则被排除在"形式"之外,降级为备用通道。
五、系列数量阶梯:categorical 颜色的配额制
文档最后一张表规定 categorical 色相按系列数量分级处理,完整继承:
| 系列数 | 处理方式 |
|---|---|
| 1–3 | 纯颜色对所有人都舒适;直接标注(direct-label) |
| 4 | 相邻形式(stacks、bars、lines)仍可守门,但直接标注变为强制——因为黄与橙现在同屏;全对形式(scatter、bubble、choropleth、small multiples)上限为3——要么折进 "Other",要么分面(facet),而不是硬塞第 4 个 |
| 5–6 | 软上限;用图例或 small multiples |
| 7–8 | token 天花板;再往上就把尾部折进 "Other"、分面为 small multiples,或改用复合编码(色相 × 形状) |
表后还有一句硬性禁令,值得单列:
Never solve "too many series" by generating more hues. A generated 9th hue is indistinguishable from an existing one under CVD and breaks every check.(永远不要靠"生成更多色相"来解决"系列太多"。生成出来的第 9 个色相在色觉障碍下与现有色相无法区分,并且破坏所有检查。)
这个"3 系列上限"不是拍脑袋,而是参考色板实测数据推出来的。palette.md 记录了默认 8 槽色板在--pairs all(全对检查)下的表现:完整 8 个色相在任何排序下都无法通过 28 对全检——因为此时对列与顺序无关;只有前 3 槽在 light/dark 两种模式下都能通过全对校验(最劣对 CVD Delta E 9.2 light / 9.4 dark,正常视觉 24.0 light / 20.9 dark)。一旦放进第 4 槽,黄色与橙色同屏,该对直接不及格(正常视觉 13.7 light,低于 15 的硬门槛;CVD 4.8 dark)。
这个校验如何落地,见 color-formula.md 的六项检查:第 4 项 CVD 分离度(OKLab Delta E ×100,目标 ≥8,地板 ≥6 且仅允许配合次级编码)外加正常视觉地板(最劣对 ≥15,硬门槛,次级编码不能豁免),并规定"scatter、bubble、choropleth、small multiples 必须传--pairs all"。其执行载体是同技能的可运行脚本 validate_palette.js(Python 孪生实现 validate_palette.py),典型命令:
node scripts/validate_palette.js \ "#2a78d6,#eb6834,#1baf7a,#eda100,#e87ba4,#008300,#4a3aa7,#e34948" --mode lightscripts/相对于该技能的基目录;scatter/bubble/choropleth/small multiples 类图表需追加--pairs all,ordinal 色阶用--ordinal切换检查集。SKILL.md 把这个脚本称为"可计算的、必须运行而不是目测"的一环——"the color part is computable, so compute it"。
六、从形态到交付:把选择串起来
回到流程视角,choosing-a-form.md的输出直接决定后续步骤的参数:
- 形态决定组件类型——bar / line / stacked / area / heatmap / stat tile / meter / hero figure,组件清单与层级见 components.md(Tier 1 为 bar、line、stat tile、meter;Tier 2 补上 area、sparkline、heatmap 等)。
- 形态中的"颜色任务"列决定调色模式:sequential 单色相、categorical 固定 8 槽顺序("never cycled")、diverging 双色相 + 灰中性点、status 固定四阶且永不复用给"系列 4"。
- 系列数决定是否触发直接标注强制项(≥4)、是否落到 "Other"/facet 折尾,以及是否改用
--pairs all全对校验。 - 无论选到什么形态,标记规格固定不变:柱宽 ≤24px、线条 2px、marker ≥8px、面积填充 ~10% 不透明度、网格线 1px 实线且低调、2px 表面色间隙与 2px 表面色环、选择性直接标注(详见 marks-and-anatomy.md);交互层默认交付:line/area 配十字线 + tooltip,bar/dot/cell 配逐标记 hover,且所有值必须另有一条无 hover 的可达路径(表格视图)。
可以推断,这套设计的意图是让"选形态"成为一个先于审美、可审计的决策点:两张决策表给出可查的默认值,四条元规则解释取舍边界,数量阶梯把 categorical 色相当成有配额的稀缺资源,而配额上限本身由仓库里可运行的校验脚本实测数据背书。对使用者而言,最实用的工作流就是文档字面给出的顺序——先问任务,查表定形,再谈颜色,最后跑脚本验证。
参考文件索引
| 文件 | 回答的问题 |
|---|---|
| choosing-a-form.md | 本文主题:选哪种图表类型 / 是不是图表 |
| SKILL.md | 七步流程与不可协商规则 |
| color-formula.md | 四种颜色任务、六项检查、snap-to-passing |
| palette.md | 参考色板实例:8 槽分类色、sequential 阶、diverging 对、status 四阶 |
| marks-and-anatomy.md | 标记规格、间距、stat tile / meter / hero figure 契约、texture |
| interaction.md | tooltip、hover、过滤器的组成规则 |
| components.md | 图表由哪些部件组成、组件分层 |
| anti-patterns.md | 反例目录:每张图都应对照检查 |
| validate_palette.js / validate_palette.py | 可运行的六项检查校验脚本(JS/Python 孪生实现) |
【免费下载链接】system_prompts_leaksExtracted system prompts from Anthropic - Claude Fable 5, Opus 5, Claude Design, Claude Code. OpenAI - ChatGPT GPT-5.6-Sol, Codex. Google - Gemini 3.5 Flash, 3.1 Pro, Antigravity. xAI - Grok, Cursor, Copilot, VS Code, Perplexity, and more. Updated regularly.项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考