AliDujie

storytelling-with-data

数据可视化与数据叙事技能,基于 Cole Nussbaumer Knaflic《Storytelling with Data》 方法论。提供 8 项可执行能力和 11 篇知识库文档,覆盖上下文分析→图表选择→去杂乱→ 注意力引导→设计评估→故事构建→综合诊断→图表改造完整工作流,以及 CEO 决策视角扩展。

AliDujie 2 Updated 4w ago

Resources

15
GitHub

Install

npx skillscat add alidujie/storytelling-with-data

Install via the SkillsCat registry.

SKILL.md

SWD (Storytelling with Data) Skill

数据可视化与数据叙事技能,基于 Cole Nussbaumer Knaflic《Storytelling with Data》方法论。

技能入口

主技能定义文件:skills/swd/SKILL.md

一、核心方法论(SWD 六课)

课程 核心问题 关键行动
1. 理解上下文 受众是谁?需要他们做什么? Who-What-How → Big Idea → 故事板
2. 选择合适展示 什么图表最容易被受众理解? 决策树选图 → 避免饼图/3D/双Y轴
3. 消除杂乱 哪些元素不增加信息价值? 六步去杂乱 → 格式塔原则
4. 聚焦注意力 受众应该先看什么? 灰色基底 + 强调色 → 视觉层次
5. 像设计师思考 是否专业且易理解? 可供性 + 可访问性 + 美学
6. 讲述故事 数据讲了什么故事? 三幕结构 → 行动标题 → BBB

黄金法则:探索性 ≠ 解释性(只展示珍珠不展示牡蛎);柱状图必须零基线;颜色稀疏使用;每图必有标题和轴标题;直接标注不用图例。

二、8 大执行能力 + CEO 视角扩展

核心能力(8 大)

  1. 上下文分析 — 受众画像、Big Idea、3 分钟故事、故事板
  2. 图表选择推荐 — 决策树、12 种图表类型、避免检测
  3. 去杂乱诊断 — 格式塔原则、认知负荷、六步去杂乱
  4. 注意力引导 — 前注意属性、颜色策略、视觉层次
  5. 设计评估 — 可供性 / 可访问性 / 美学三维度
  6. 数据故事构建 — 三幕结构、BBB、水平逻辑
  7. 可视化综合诊断 — 五维度 100 分制
  8. 图表改造 — 六步法、渐进式揭示

CEO 视角扩展(新增)

  1. 决策选项对比 — 多方案对比表、推荐方案、关键假设、决策建议
  2. 执行风险可视化 — 风险矩阵、风险对比表、缓解措施
  3. 决策框架生成 — 决策质量检查清单、决策后追踪、决策流程图

使用方式:在 build_story() 方法中设置 include_ceo_analysis=True 即可自动包含 CEO 视角扩展分析。

三、触发条件总表

触发词 / 场景 执行能力 输出物
做汇报 / 给谁看 / 受众 / Big Idea 一:上下文分析 受众画像表、Big Idea、故事板
用什么图 / 选图表 / 怎么展示数据 二:图表选择 推荐图表 + 设计要点 + 避免项
图太乱 / 太复杂 / 简化 / 去杂乱 三:去杂乱诊断 杂乱清单 + 六步骤 + 格式塔建议
突出重点 / 颜色怎么用 / 注意力 四:注意力引导 焦点分析 + 颜色方案 + 层次设计
好不好看 / 专不专业 / 设计评估 五:设计评估 三维度检查 + 通过率 + 改进建议
怎么讲故事 / 叙事结构 / 汇报结构 六:故事构建 三幕结构 + BBB + 标题序列
帮我看看这个图 / 诊断 / 评分 七:综合诊断 五维度总分 + 各维度明细 + Top 3 建议
改造 / 优化 / 改进 / makeover 八:图表改造 六步方案 + 设计规范 + 叙事幻灯片
CEO 决策 / 方案对比 / 投资回报 九:决策选项对比 对比表 + 推荐方案 + 关键假设
风险评估 / 风险矩阵 / 执行风险 十:执行风险可视化 风险矩阵 + 风险对比 + 缓解措施
决策框架 / 质量检查 / 决策流程 十一:决策框架生成 检查清单 + 追踪指标 + 流程图
综合数据汇报任务 按顺序执行一→八 完整数据故事
CEO 级别汇报任务 一→八 + 九→十一 数据故事 + CEO 决策支持

四、目录结构

storytelling-with-data-skill/
├── SKILL.md                    # 本文件(顶层索引 + 工具包 + 最佳实践)
├── skills/swd/SKILL.md         # 主技能定义(8 大执行能力详细协议)
├── knowledge/                  # 11 个知识库文档
│   ├── 01-context.md           # 上下文的重要性
│   ├── 02-visual-display.md    # 选择有效的视觉展示
│   ├── 03-clutter.md           # 杂乱是你的敌人
│   ├── 04-attention.md         # 聚焦受众注意力
│   ├── 05-designer.md          # 像设计师一样思考
│   ├── 06-model-visuals.md     # 解剖模型视觉
│   ├── 07-storytelling.md      # 叙事课
│   ├── 08-pulling-together.md  # 融会贯通(六步实战案例)
│   ├── 09-case-studies.md      # 案例研究
│   ├── 10-final-thoughts.md    # 最终思考
│   └── 11-quick-reference.md   # 速查手册
├── swd/                        # Python 工具包
│   ├── __init__.py             # SWDSkill 统一入口类
│   ├── config.py               # 全局配置和常量
│   ├── context.py              # 上下文分析引擎
│   ├── chart_selector.py       # 图表选择决策器
│   ├── declutter.py            # 去杂乱诊断器
│   ├── attention.py            # 注意力引导分析器
│   ├── designer.py             # 设计评估器
│   ├── storyteller.py          # 故事构建器
│   ├── diagnosis.py            # 综合诊断引擎
│   ├── makeover.py             # 图表改造引擎
│   ├── templates.py            # 报告模板
│   ├── utils.py                # 工具函数
│   └── tests/
│       ├── __init__.py
│       └── test_all.py         # 8 个测试用例
├── README.md
├── pyproject.toml
├── requirements.txt
└── .gitignore

五、知识库

详细知识文档位于 knowledge/ 目录,按书的章节组织:

文件 对应章节 核心内容
01-context.md Ch.1 上下文 Who-What-How、Big Idea、3 分钟故事、故事板
02-visual-display.md Ch.2 选择展示 12 种图表类型、决策树、避免的图表
03-clutter.md Ch.3 杂乱 认知负荷、格式塔 6 原则、去杂乱六步骤
04-attention.md Ch.4 注意力 12 种前注意属性、颜色五原则、渐进式揭示
05-designer.md Ch.5 设计师 可供性、可访问性、美学、接受度
06-model-visuals.md Ch.6 模型视觉 5 个模型视觉的设计解剖
07-storytelling.md Ch.7 叙事 三幕结构、BBB、水平 / 垂直逻辑
08-pulling-together.md Ch.8 融会贯通 六步法完整实战案例
09-case-studies.md Ch.9 案例 深色背景、动画、排序、意面图、饼图替代
10-final-thoughts.md Ch.10 最终思考 5 个实践建议、团队能力建设
11-quick-reference.md 速查手册 决策树、检查清单、评分表、问题修复映射

六、图表选择决策树

你要展示什么?
├── 1-2 个数字 → 简单文本(大字号 + 支撑文字)
├── 精确数值查找 → 表格 / 热力图
├── 两变量关系 → 散点图
├── 时间趋势
│   ├── 两个时间点 → 坡度图
│   └── 多个时间点 → 折线图
├── 分类数据
│   ├── 类别名长 / 类别 > 5 → 水平柱状图 ⭐首选
│   ├── 类别名短 → 垂直柱状图
│   └── 起点 + 增减 + 终点 → 瀑布图
├── 部分与整体 → 100% 堆叠水平柱状图
└── 永远避免
    ├── 饼图 → 替代:水平柱状图
    ├── 3D → 替代:2D 版本
    └── 双 Y 轴 → 替代:拆分 / 直接标注

七、五维度诊断评分体系

每维度 20 分,总分 100 分:

维度 评分项(每项 5 分) 关注点
上下文 (20) audience_clear / cta_clear / big_idea_visible / data_supports_story 受众明确?行动号召清晰?
视觉选择 (20) chart_type_fit / avoid_bad_charts / zero_baseline / logical_order 图表类型合适?零基线?
杂乱 (20) no_unnecessary_elements / no_diagonal_text / whitespace_ok / no_redundancy 无多余元素?白空间恰当?
注意力 (20) preattentive_used / color_sparse / visual_hierarchy / eyes_drawn_test 颜色稀疏?眼睛测试通过?
设计叙事 (20) text_sufficient / alignment_aesthetic / narrative_structure / action_titles 行动标题?叙事结构?

评级标准:90+ 🟢卓越 | 70-89 🟡良好 | 50-69 🟠需改进 | <50 🔴需重做


八、Python 可执行工具包

8.1 安装与依赖

纯 Python 实现,无外部依赖,仅需 Python 3.8+。

# 方式 1:直接引用项目路径
import sys; sys.path.insert(0, "/path/to/storytelling-with-data-skill")
from swd import SWDSkill

# 方式 2:复制 swd/ 和 knowledge/ 目录到你的项目
cp -r swd/ knowledge/ /your/project/

# 方式 3:作为 AI Skill 安装
cp -r skills/swd ~/.aoneclaw/skills/swd

依赖清单

依赖 版本 说明
Python ≥ 3.8 标准库 dataclasses, pathlib, typing
外部包 纯标准库实现

8.2 SWDSkill 统一入口类

SWDSkill 封装全部 8 大执行能力,每个方法返回格式化的 Markdown 报告字符串。

from swd import SWDSkill

# 初始化:传入项目名称
skill = SWDSkill("Q4 季度业绩汇报")

# 可选:传入自定义配置
from swd import AnalysisConfig
config = AnalysisConfig()
skill = SWDSkill("Q4 季度业绩汇报", config=config)

SWDSkill 方法一览

方法 能力 必填参数 返回值
build_context() 上下文分析 audience, cta Markdown 报告
recommend_chart() 图表选择 data_type Markdown 报告
diagnose_clutter() 去杂乱 至少一个 has_* 标志 Markdown 报告
plan_attention() 注意力引导 focus_elements Markdown 报告
evaluate_design() 设计评估 至少一个检查项 Markdown 报告
build_story() 故事构建 protagonist, imbalance Markdown 报告
full_diagnosis() 综合诊断 scores 字典 Markdown 报告
makeover() 图表改造 issues 列表 Markdown 报告
search_knowledge() 知识检索 keyword Dict[str, List[str]]

8.3 八大核心模块详解

模块 1:上下文分析 — context.py

ContextBuilderContextAnalysis

使用场景:准备数据汇报前,明确受众、目的和核心信息。

参数说明

参数 类型 必填 说明
audience str 主要受众(具体职位,如"产品VP")
cta str 行动号召(如"批准200万预算")
decision_maker str 最终决策者
knowledge_level str expert / general / novice
relationship str first_contact / established / need_credibility
mechanism str live_presentation / written_report / email
tone str serious / urgent / celebratory / neutral
three_min_story str 3 分钟故事文本
big_idea str Big Idea 完整句子
supporting_data List[str] 支撑数据列表
risks List[str] 风险 / 反面证据

返回值:Markdown 报告,包含受众画像表、3 分钟故事、Big Idea、支撑数据清单、风险清单、行动号召。

result = skill.build_context(
    audience="产品VP", cta="批准200万预算",
    decision_maker="CTO", knowledge_level="general",
    three_min_story="用户增长在Q3放缓,需要投入新功能拉动。",
    big_idea="新用户引导体验是增长瓶颈,投入200万可在Q1恢复增长",
    supporting_data=["新用户7日留存率从45%降至32%"],
    risks=["效果可能需要2个季度显现"],
)

模块 2:图表选择 — chart_selector.py

ChartSelectorChartRecommendation

使用场景:选择最适合数据特征的图表类型,检测应避免的图表。

参数说明

参数 类型 必填 说明
data_type str categorical / continuous / relationship / single_number
series_count int 数据系列数(默认 1)
category_count int 类别数(默认 0)
has_time bool 是否有时间维度
show_part_of_whole bool 是否展示部分与整体
category_names_long bool 类别名是否较长
compare_two_points bool 是否比较两个时间点
proposed_chart str 检测用户提出的图表是否应避免(pie/3d/dual_axis)

返回值:Markdown 报告,包含推荐图表(含理由)、备选图表、设计要点、避免项警告。

result = skill.recommend_chart(
    data_type="continuous", has_time=True,
    series_count=2, category_count=12,
    proposed_chart="pie",  # 触发饼图避免警告
)

模块 3:去杂乱诊断 — declutter.py

DeclutterAnalyzerDeclutterReport

使用场景:诊断图表中的杂乱元素,给出基于格式塔原则的改进建议。

参数说明

参数 类型 说明
has_border bool 是否有图表边框
has_gridlines bool 是否有网格线
has_3d bool 是否有 3D 效果
has_diagonal_text bool 是否有对角文本
has_separate_legend bool 是否有独立图例
has_trailing_zeros bool 是否有尾部零(250.00)
has_data_markers bool 是否有不必要的数据标记
gestalt_issues List[Tuple] 格式塔问题:(原则, 问题, 建议)
alignment_issues List[str] 对齐问题列表
whitespace_issues List[str] 白空间问题列表

返回值:Markdown 报告,包含杂乱元素清单(含严重度)、去杂乱六步骤(标记已检测项)、格式塔建议、认知负荷估算。

result = skill.diagnose_clutter(
    has_border=True, has_gridlines=True, has_3d=True,
    gestalt_issues=[("proximity", "标签离数据太远", "缩小间距")],
)

模块 4:注意力引导 — attention.py

AttentionAnalyzerAttentionPlan

使用场景:规划视觉焦点引导方案,设计颜色策略和视觉层次。

参数说明

参数 类型 说明
focus_elements List[Tuple[str, int]] 焦点元素:(名称, 重要性 1-5)
color_strategy str grey_plus_one / sequential / diverging
accent_color str 强调色(默认蓝色)
hierarchy List[Tuple[int, List[str], str]] 层次:(级别, 元素列表, 处理方式)

返回值:Markdown 报告,包含焦点分析表、颜色方案、视觉层次设计、"眼睛看向哪里"诊断。

result = skill.plan_attention(
    focus_elements=[("流失率趋势", 5), ("基准线", 2)],
    hierarchy=[(1, ["流失率趋势"], "大号+粗体+蓝色"),
               (3, ["轴标签"], "小号+浅灰")],
)

模块 5:设计评估 — designer.py

DesignEvaluatorDesignAssessment

使用场景:从可供性、可访问性、美学三个维度评估图表设计质量。

参数说明:全部为 bool 类型检查项,包括 has_title / has_axis_titles / has_action_title / has_annotations / color_strategic / alignment_clean / whitespace_ok / hierarchy_clear / highlight_limited / distractions_removed。

返回值:Markdown 报告,包含三维度检查结果(✅/❌)、总通过率和评级、按优先级排序的改进建议。

result = skill.evaluate_design(
    has_title=True, has_action_title=False,
    color_strategic=False, alignment_clean=True,
)

模块 6:故事构建 — storyteller.py

StoryBuilderDataStory

使用场景:构建完整的数据故事,包含三幕结构和幻灯片标题序列。

关键参数:protagonist(主角/受众)、imbalance(冲突)、evidence(数据证据列表)、call_to_action(行动号召)、narrative_flow(chronological / lead_with_ending)、slide_titles(标题序列)。

返回值:Markdown 报告,包含三幕结构、BBB、标题序列(含水平逻辑检查)。

result = skill.build_story(
    protagonist="产品委员会", imbalance="用户增长率下降",
    evidence=["留存率降至32%", "竞品NPS高出20分"],
    call_to_action="批准200万优化预算",
    slide_titles=["增长率降至8%", "根因:首周留存骤降", "建议投入200万优化"],
)

模块 7:综合诊断 — diagnosis.py

DiagnosisEngineDiagnosisResult

使用场景:对一个数据可视化进行五维度 100 分制综合诊断。

参数:scores 字典,五个维度各含 4 个评分项(每项 1-5 分)。

返回值:Markdown 报告,包含总分 + 徽章、各维度明细表、Top 改进建议。

result = skill.full_diagnosis(scores={
    "context": {"audience_clear": 4, "cta_clear": 3,
                "big_idea_visible": 2, "data_supports_story": 4},
    "visual_choice": {"chart_type_fit": 5, "avoid_bad_charts": 5,
                      "zero_baseline": 5, "logical_order": 4},
    "clutter": {"no_unnecessary_elements": 3, "no_diagonal_text": 5,
                "whitespace_ok": 4, "no_redundancy": 3},
    "attention": {"preattentive_used": 2, "color_sparse": 3,
                  "visual_hierarchy": 2, "eyes_drawn_test": 3},
    "design_narrative": {"text_sufficient": 4, "alignment_aesthetic": 4,
                         "narrative_structure": 3, "action_titles": 2},
})

模块 8:图表改造 — makeover.py

MakeoverEngineMakeoverPlan

使用场景:从原始问题图表到数据故事的完整改造流程。

参数:issues(问题列表)、chart_type / title / color_accent(设计规范)、narrative_slides(叙事幻灯片序列)。

返回值:Markdown 报告,包含问题诊断、六步改造方案(改造前/后/原理)、设计规范表、叙事幻灯片序列。

result = skill.makeover(
    issues=["使用了饼图", "无标题", "彩虹色"],
    chart_type="水平柱状图",
    title="客户满意度最高的三个功能贡献了75%的好评",
    narrative_slides=[("整体满意度82%", "建立信任"),
                      ("功能C和D满意度偏低", "揭示问题")],
)

8.4 完整使用示例

示例 1:季度业绩汇报(端到端流程)

from swd import SWDSkill

skill = SWDSkill("Q4季度业绩汇报")

# Step 1: 上下文分析 — 明确受众和核心信息
ctx = skill.build_context(
    audience="CEO和产品VP",
    cta="批准Q1增长计划的300万预算",
    decision_maker="CEO",
    knowledge_level="general",
    mechanism="live_presentation",
    big_idea="用户增长放缓源于新用户引导体验不佳,投入300万优化可在Q1恢复15%月均增长",
    supporting_data=["新用户7日留存率从45%降至32%", "竞品首周体验NPS高出20分"],
)
print(ctx)

# Step 2: 选择图表 — 时间趋势用折线图
chart = skill.recommend_chart(
    data_type="continuous", has_time=True,
    series_count=3, category_count=12,
)
print(chart)

# Step 3: 去杂乱 — 诊断现有图表问题
clutter = skill.diagnose_clutter(
    has_border=True, has_gridlines=True,
    has_separate_legend=True, has_trailing_zeros=True,
)
print(clutter)

# Step 4: 注意力引导 — 突出流失率趋势
attn = skill.plan_attention(
    focus_elements=[("流失率趋势线", 5), ("行业基准", 2), ("轴标签", 1)],
    hierarchy=[
        (1, ["流失率趋势线", "关键数字"], "大号+粗体+蓝色"),
        (2, ["行业基准"], "中号+深灰+虚线"),
        (3, ["轴标签", "数据来源"], "小号+浅灰"),
    ],
)
print(attn)

# Step 5: 设计评估 — 检查改进后的图表
design = skill.evaluate_design(
    has_title=True, has_axis_titles=True, has_action_title=True,
    has_annotations=True, color_strategic=True, alignment_clean=True,
    whitespace_ok=True, hierarchy_clear=True,
)
print(design)

# Step 6: 构建故事 — 三幕结构
story = skill.build_story(
    protagonist="CEO和产品VP",
    imbalance="新用户月均增长率从15%降至8%,连续3个月下滑",
    setting="公司进入成熟期,获客成本持续上升",
    desired_balance="恢复15%月均新用户增长率",
    evidence=["首周留存率从45%降至32%", "竞品首周NPS高出20分", "A/B测试显示优化可提升留存12%"],
    call_to_action="批准300万预算用于Q1新用户引导体验优化",
    narrative_flow="lead_with_ending",
    slide_titles=[
        "建议投入300万优化新用户引导,Q1可恢复15%增长",
        "新用户增长率连续3月下降至8%",
        "根因:首周留存率从45%骤降至32%",
        "竞品首周体验NPS高出我们20分",
        "A/B测试证明优化引导可提升留存12%",
    ],
)
print(story)

示例 2:图表改造(问题图表 → 数据故事)

from swd import SWDSkill

skill = SWDSkill("客户满意度报告改造")

# Step 1: 诊断问题
diag = skill.full_diagnosis(scores={
    "context":          {"audience_clear": 2, "cta_clear": 1, "big_idea_visible": 1, "data_supports_story": 3},
    "visual_choice":    {"chart_type_fit": 1, "avoid_bad_charts": 1, "zero_baseline": 5, "logical_order": 2},
    "clutter":          {"no_unnecessary_elements": 2, "no_diagonal_text": 1, "whitespace_ok": 2, "no_redundancy": 2},
    "attention":        {"preattentive_used": 1, "color_sparse": 1, "visual_hierarchy": 1, "eyes_drawn_test": 1},
    "design_narrative": {"text_sufficient": 2, "alignment_aesthetic": 2, "narrative_structure": 1, "action_titles": 1},
})
print(diag)  # 预期:🔴 需重做

# Step 2: 执行改造
makeover = skill.makeover(
    issues=["使用了饼图展示5个类别", "无标题", "彩虹色配色", "独立图例", "对角文本标签", "居中对齐"],
    chart_type="水平柱状图",
    title="客户满意度最高的三个功能贡献了75%的好评",
    color_accent="蓝色",
    narrative_slides=[
        ("整体满意度达到82%,高于行业均值", "先展示好消息建立信任"),
        ("但功能C和D的满意度显著低于平均", "用橙色强调问题区域"),
        ("建议优先优化功能C的用户体验", "给出明确行动号召"),
    ],
)
print(makeover)

# Step 3: 搜索相关知识
kb = skill.search_knowledge("饼图")
for topic, lines in kb.items():
    print(f"\n--- {topic} ---")
    for line in lines:
        print(f"  {line}")

8.5 AI Agent 调用规则

# 规则 说明
1 统一入口 始终通过 SWDSkill 类调用,不直接实例化 ContextBuilder 等子模块
2 返回值 所有方法返回 Markdown 格式字符串,可直接展示给用户
3 触发映射 根据用户意图自动选择对应能力(参见触发条件总表)
4 组合调用 综合任务按 能力一→八 顺序依次执行
5 知识优先 遇到理论问题时先调用 search_knowledge() 查询知识库
6 渐进式 先诊断(能力七)再改造(能力八),不要跳过诊断直接改造
7 上下文先行 任何数据可视化任务都应先执行上下文分析(能力一)
8 验证闭环 改造完成后用设计评估(能力五)验证改造效果

8.6 测试说明

# 运行全部 8 个测试用例
cd storytelling-with-data-skill
python swd/tests/test_all.py

# 使用 pytest(如已安装)
python -m pytest swd/tests/test_all.py -v

测试覆盖

测试用例 覆盖能力 验证内容
test_build_context() 上下文分析 受众画像、Big Idea、支撑数据、风险
test_recommend_chart() 图表选择 折线图/水平柱状图/坡度图推荐、饼图避免
test_diagnose_clutter() 去杂乱 6种杂乱检测、格式塔建议、对齐/白空间
test_plan_attention() 注意力引导 焦点分析、颜色策略、视觉层次、眼睛诊断
test_evaluate_design() 设计评估 全通过→卓越、多项未通过→需改进
test_build_story() 故事构建 三幕结构、BBB、标题序列、水平逻辑
test_full_diagnosis() 综合诊断 五维度评分、总分计算、评级、改进建议
test_makeover() 图表改造 问题识别、改造步骤、设计规范、叙事幻灯片

8.7 与其他 Skill 的协作

SWD Skill 可与其他 Skill 组合使用,形成完整的数据驱动决策工作流:

协作场景 协作 Skill 工作流
用户研究报告可视化 Quantitative-UX-Research UXR 产出数据 → SWD 选图表 → SWD 构建故事
价值主张数据展示 value-proposition-design VPD 产出画布 → SWD 可视化关键数据 → SWD 改造图表
JTBD 研究结果汇报 jtbd-knowledge-skill JTBD 产出分析 → SWD 上下文分析 → SWD 构建汇报故事
竞品分析数据展示 竞品分析 Skill 竞品数据 → SWD 图表选择 → SWD 注意力引导 → SWD 故事构建
用户研究发现可视化 universal-design-methods UDM 研究发现 → SWD 图表选择 → SWD 数据故事
人物角色数据展示 web-persona-skill Persona 角色数据 → SWD 选图表 → SWD 构建故事
战略分析数据可视化 structured-thinking-model STM 分析框架 → SWD 数据可视化 → STM 决策建议

协作示例(JTBD + SWD)

# Step 1: JTBD Skill 产出用户需求分析
# jtbd_result = jtbd_skill.analyze(...)

# Step 2: SWD Skill 将分析结果可视化并构建汇报
swd = SWDSkill("JTBD研究结果汇报")

# 上下文:向产品委员会汇报JTBD研究发现
ctx = swd.build_context(
    audience="产品委员会",
    cta="基于JTBD发现调整Q2产品路线图",
    big_idea="用户核心Job是'快速完成任务'而非'探索功能',应简化而非增加功能",
)

# 选择图表:需求优先级用水平柱状图
chart = swd.recommend_chart(
    data_type="categorical", category_count=8, category_names_long=True,
)

# 构建故事
story = swd.build_story(
    protagonist="产品委员会",
    imbalance="当前产品功能过多导致用户完成核心任务的时间增加了40%",
    evidence=["JTBD访谈发现80%用户的核心Job是快速完成任务", "功能使用率数据显示60%功能使用率<5%"],
    call_to_action="精简产品功能,聚焦核心Job",
)

九、最佳实践

9.1 可视化设计原则

SWD 十大设计原则

# 原则 说明 常见违反
1 先明确受众再动手 不同受众需要不同的沟通方式 做完图表才想受众是谁
2 每张图只讲一个故事 一张图承载太多信息会失去焦点 在一张图中展示所有发现
3 使用行动标题 标题告诉受众"所以呢"而非"这是什么" "销售趋势" vs "销售额Q3下降15%"
4 颜色稀疏使用 颜色是最强大的工具,但必须策略性使用 彩虹色、每个系列不同颜色
5 灰色是你的朋友 先全灰设计,再决定哪里需要颜色 默认使用工具的彩色配色
6 直接标注数据 消除图例来回查看的认知负荷 使用独立图例
7 柱状图必须零基线 非零基线会严重扭曲数据比例 从50开始的Y轴
8 对齐创建秩序 元素对齐创建干净的线条和专业感 居中对齐、元素随意放置
9 白空间是战略性的 不要为填满空间而添加元素 拉伸图表填满页面
10 讲故事而非展示数据 有开始、中间、结尾和行动号召 把数据倒在桌上让受众自己找

9.2 常见错误与避免

# 常见错误 问题 正确做法 SWD 能力
1 使用饼图 人眼难以比较角度和面积 水平柱状图(按大小排序) 二:图表选择
2 使用3D效果 扭曲数值,造成误导 对应的2D版本 二:图表选择
3 双Y轴 受众难以判断对应关系 拆分为两个图或直接标注 二:图表选择
4 彩虹色配色 太多颜色失去前注意价值 灰色基底+单一强调色 四:注意力
5 描述标题 受众不知道"所以呢" 行动标题(传达结论) 六:故事
6 独立图例 来回查看增加认知负荷 直接标注在数据旁 三:去杂乱
7 对角文本 阅读速度慢52% 缩写标签或用水平柱状图 三:去杂乱
8 居中对齐 不产生干净的线条 左对齐 五:设计
9 无轴标题 受众不知道坐标含义 添加简洁的轴标题 五:设计
10 意面图 多条线重叠无法聚焦 逐一强调或空间分离 八:改造
11 非零基线柱状图 扭曲数据比例 柱状图必须从零开始 二:图表选择
12 展示所有数据 信息过载,无焦点 只展示支撑故事的数据 一:上下文

9.3 检查清单

在发布任何数据可视化之前,逐项检查:

上下文检查

  • 受众已明确(具体到职位/角色)
  • 行动号召已明确(受众知道该做什么)
  • Big Idea 可在 5 秒内识别
  • 数据支撑故事(而非仅展示数据)
  • 已考虑反面数据和风险

视觉选择检查

  • 图表类型适合数据特征
  • 未使用饼图/3D/双Y轴
  • 柱状图有零基线
  • 数据排序有逻辑(自然顺序或数值顺序)
  • 时间轴间隔一致

杂乱检查

  • 无图表边框
  • 无或弱化网格线(浅灰细线)
  • 无不必要的数据标记
  • 无尾部零(250.00→250)
  • 无对角文本
  • 直接标注数据(无独立图例)
  • 无3D效果和背景阴影

注意力检查

  • 使用了前注意属性引导焦点
  • 颜色稀疏且有策略(灰色基底+强调色)
  • 创建了清晰的视觉层次(L1/L2/L3)
  • "眼睛首先看向哪里"测试通过
  • 色盲友好(避免红绿同用)

设计检查

  • 有行动标题(而非描述标题)
  • 有轴标题
  • 关键数据点有注释
  • 有数据来源标注
  • 元素左对齐(不居中)
  • 白空间恰当保留
  • 字体一致且易读

叙事检查

  • 有开始、中间、结尾
  • 有明确的行动号召
  • 水平逻辑通过(只读标题能讲完整故事)
  • 垂直逻辑通过(每张幻灯片内容支撑标题)
  • 区分了演示版和流通版

十、参考资料

10.1 核心书籍

书名 作者 关键贡献
Storytelling with Data Cole Nussbaumer Knaflic (2015) 本 Skill 的理论基础,SWD 六课体系
The Visual Display of Quantitative Information Edward Tufte (2001) 数据墨水比、图表垃圾概念
Resonate Nancy Duarte (2010) Big Idea 概念、演示叙事结构
Universal Principles of Design Lidwell, Holden, Butler (2010) 设计原则、接受度理论
Beautiful Evidence Edward Tufte (2006) Sparklines、数据可视化美学
Information Dashboard Design Stephen Few (2006) 仪表盘设计最佳实践

10.2 在线资源

资源 链接 说明
storytellingwithdata.com Cole 的官方博客 持续更新的案例和教程
SWD Community 社区论坛 实践者分享和讨论
SWD Challenge 月度挑战 每月一个数据可视化练习题
Datawrapper Blog datawrapper.de/blog 实用的图表设计指南
Tableau Public public.tableau.com 可视化灵感和案例

10.3 相关 Skill

Skill 仓库 协作方式
JTBD Knowledge Skill AliDujie/jtbd-knowledge-skill JTBD 研究结果 → SWD 可视化汇报
Value Proposition Design AliDujie/value-proposition-design VPD 画布数据 → SWD 图表展示
Quantitative UX Research AliDujie/Quantitative-UX-Research UXR 定量数据 → SWD 故事构建
Universal Design Methods AliDujie/universal-design-methods UDM 研究发现 → SWD 图表选择 → SWD 数据故事
Web Persona AliDujie/web-persona-skill Persona 角色数据 → SWD 选图表 → SWD 构建故事
Structured Thinking Model AliDujie/Structured-Thinking-Model STM 分析框架 → SWD 数据可视化 → STM 决策建议