1. 从一张草图到一套系统:diagram-design 到底在解决什么问题
第一次看到 diagram-design 这个词,很多人会以为它只是一个画图工具的代称。但真正在项目里摸爬滚打过几年的人会明白,它指向的是一套完整的“图表设计体系”——从需求梳理、结构抽象、视觉编码,到最终交付一份别人能看懂、能复用、能维护的图表资产。它不是一个软件,而是一种把复杂信息压缩成可视图形的工程方法。
我最早接触这类工作是在一个后台管理系统的重构项目里。当时产品经理丢过来十几页文字需求,开发团队看完一头雾水,测试同学更是不知道从哪下手。后来我们用 diagram-design 的思路,把业务流程、数据流向、状态机、部署拓扑分别画成四类图,整个项目的沟通成本直接砍掉一半。从那以后我就意识到,图表设计不是“美化”,而是“翻译”——把模糊的自然语言翻译成精确的结构语言。
diagram-design 能做的事情,大致可以分成三层。最底层是信息结构化,也就是把一堆零散的需求、日志、接口描述整理成有层级、有关系的节点和边。中间层是视觉编码,决定用什么形状表示什么类型的实体,用什么颜色表示什么状态,用什么线型表示什么关系。最上层是交付与维护,包括图表的版本管理、嵌入文档、自动生成等。这三层缺一不可,只做中间层就是“画图员”,只做最底层就是“文档搬运工”。
适合看这篇内容的人,我大致分成三类。第一类是技术岗位的从业者,比如后端开发、运维、数据工程,需要把系统架构、数据链路、部署方案讲清楚。第二类是产品与项目岗位,需要把业务逻辑、用户旅程、状态流转可视化。第三类是对信息设计感兴趣的独立创作者,想用图表提升内容表达力。不管你是哪一类,只要你的工作里出现过“这张图看不懂”“这个流程说不清”“这个架构图改了八版还是乱”的情况,diagram-design 这套方法就能帮上忙。
接下来我会按照“整体设计思路—核心细节解析—实操过程—常见问题排查”的顺序,把我在多个项目里沉淀下来的 diagram-design 方法论完整拆开。每一部分都会给出具体的判断依据、参数选择逻辑和踩坑记录,你可以直接拿去套用到自己的项目里。
2. 整体设计思路:为什么大多数图表一开始就画错了
2.1 先定“读者视角”,再定“图形语法”
很多人画图的第一步是打开工具,拖一个矩形出来。这是典型的顺序错误。diagram-design 的第一步应该是确定读者是谁。同一套系统,给开发看的架构图和给管理层看的架构图,信息密度和抽象层级完全不同。给开发看的图可以标出具体的服务名、端口号、中间件版本;给管理层看的图只需要表达“有几个核心模块、它们之间怎么交互、瓶颈可能在哪”。
我通常会把读者分成四类:执行者(需要照着图去写代码或配置)、决策者(需要判断方案是否合理)、维护者(需要根据图去排查问题)、新人(需要快速理解系统全貌)。这四类人对图表的需求优先级不一样。执行者最在意准确性和细节完整性;决策者最在意层级和关键路径;维护者最在意异常分支和边界条件;新人最在意整体框架和术语解释。
确定读者之后,才轮到选择图形语法。图形语法这个词听起来玄乎,其实就三件事:用什么形状表示实体,用什么连线表示关系,用什么视觉变量表示属性。我自己的习惯是建立一套“最小可用语法”,比如:
- 矩形表示服务或模块
- 圆角矩形表示外部系统或用户
- 圆柱体表示数据存储
- 实线箭头表示同步调用
- 虚线箭头表示异步消息
- 红色表示异常路径或高风险节点
- 灰色表示已废弃或计划下线
这套语法一旦定下来,整个项目组都遵守,图表的可读性会大幅提升。最怕的是同一个人在不同图里用不同颜色表示同一个含义,读者每看一张图都要重新学习一遍图例。
2.2 抽象层级:一张图只讲一件事
diagram-design 里最容易犯的错误是“一张图想讲完所有事”。我见过一张架构图里同时画了业务模块、数据库表字段、服务器IP、甚至代码类名。这种图除了作者本人,没人能看懂。
正确的做法是按抽象层级拆图。我一般会拆成四层:
| 层级 | 名称 | 关注点 | 典型读者 |
|---|---|---|---|
| L1 | 上下文图 | 系统与外部的关系 | 决策者、新人 |
| L2 | 容器图 | 主要服务/模块划分 | 架构师、开发负责人 |
| L3 | 组件图 | 模块内部结构 | 开发、维护者 |
| L4 | 代码/配置图 | 具体实现细节 | 执行者 |
每一层只讲一件事。L1 不出现数据库,L2 不出现类名,L3 不出现服务器IP,L4 不出现业务背景。这样做的理由是:读者的认知带宽有限,一张图里每增加一个维度的信息,理解成本就翻一倍。分层之后,读者可以按需深入,而不是被一次性淹没。
2.3 工具选型:文本驱动还是画布驱动
工具选型是 diagram-design 里争议最大的部分。我的判断标准很简单:看这张图需要活多久,以及需要改多少次。
如果是一张一次性的汇报图,画布驱动工具(拖拽式)效率最高,所见即所得,调整布局方便。但如果是一张需要长期维护、频繁更新的图,比如系统架构图、数据流图,文本驱动工具(用代码描述图表)优势明显。原因有三个:第一,文本可以进版本控制,每次改动都有记录;第二,文本可以复用,同样的节点定义可以在多张图里引用;第三,文本可以自动生成,比如从配置文件或接口定义里解析出节点和关系。
我自己的项目里,长期维护的图基本都用文本驱动方案。常用的描述语言有 Mermaid、PlantUML、Graphviz DOT 等。选择哪一个取决于团队的技术栈和输出需求。Mermaid 对 Markdown 友好,适合嵌入文档;PlantUML 支持的图类型最全,适合复杂系统;Graphviz 的自动布局能力最强,适合节点多、关系复杂的网络图。
注意:不要为了“看起来专业”而选择团队里没人会维护的工具。我见过一个项目用了一款很小众的绘图工具,作者离职后没人能改那张图,最后只能重新画。工具选型的核心是“可维护性”,不是“功能多”。
2.4 视觉编码的四个原则
视觉编码是 diagram-design 的核心手艺。我总结了四个原则,按优先级排序:
第一,形状先于颜色。人眼对形状的识别速度远快于颜色。所以实体类型应该用形状区分,颜色只用来表示状态或属性。如果反过来,用颜色区分实体类型,用形状表示状态,读者会非常累。
第二,连线方向要统一。要么全部从左到右,要么全部从上到下。混用方向会让读者在脑子里不断旋转坐标系。我通常规定:数据流从左到右,控制流从上到下,依赖关系从下到上。
第三,留白是信息的一部分。节点之间留出足够的间距,让连线清晰可辨。拥挤的图会让读者产生焦虑感,而且容易看错关系。我一般要求节点间距不小于节点宽度的三分之一。
第四,图例必须完整。任何非标准的形状、颜色、线型都要在图例里说明。图例的位置固定在图的右下角或左下角,不要每张图换位置。
3. 核心细节解析:从需求到图表的完整转化链路
3.1 信息采集:把“口头描述”变成“结构化清单”
diagram-design 的起点不是画图,而是采集信息。我通常会用一份结构化清单来引导信息采集,避免遗漏关键节点。这份清单包含以下字段:
- 实体名称:这个节点叫什么
- 实体类型:服务、数据库、队列、外部系统、用户角色
- 职责描述:一句话说明它做什么
- 输入:它接收什么数据或请求
- 输出:它产生什么数据或响应
- 依赖:它依赖哪些其他实体
- 状态:正常、异常、降级、废弃
- 负责人:谁维护这个实体
这份清单看起来繁琐,但实际用起来非常高效。我通常会让相关同事花二十分钟填一遍,然后我根据清单直接生成图表描述文本。这样做的好处是:信息采集和图表绘制分离,采集阶段专注准确性,绘制阶段专注可读性。
实操心得:采集信息时,一定要问“异常情况下会怎样”。很多图表只画了正常路径,导致维护者遇到问题时找不到对应的分支。异常路径往往比正常路径更重要。
3.2 关系建模:四种基本关系及其视觉表达
在 diagram-design 里,实体之间的关系可以归纳为四种基本类型。每种类型都有对应的视觉表达方式,不能混用。
第一种是调用关系。A 调用 B 的接口,等待 B 返回结果。视觉上用实线箭头表示,箭头指向被调用方。如果调用是异步的,用虚线箭头。如果调用有重试机制,可以在箭头旁标注重试次数。
第二种是数据流向。A 把数据写入 B,或者从 B 读取数据。视觉上用带箭头的管道表示,管道粗细可以表示数据量大小。如果数据是批量传输,用虚线管道;如果是实时流,用实线管道。
第三种是依赖关系。A 在运行时不直接调用 B,但 A 的正常工作依赖 B 的存在。比如服务依赖配置中心、依赖注册中心。视觉上用虚线无箭头线表示,或者用带空心箭头的线表示。
第四种是包含关系。A 是 B 的一部分,或者 A 在 B 的内部运行。视觉上用嵌套的矩形表示,外层是容器,内层是组件。这种关系在容器图和组件图里最常见。
这四种关系不能混用。我见过有人用调用关系的箭头表示数据流向,结果读者以为两个服务之间有同步调用,实际上只是数据同步。关系类型一旦混淆,整张图的语义就崩了。
3.3 布局算法:手动布局还是自动布局
布局是 diagram-design 里最耗时的环节。手动布局可控性最强,但节点一多就非常痛苦。自动布局效率高,但结果往往不符合阅读习惯。
我的策略是混合布局:先用自动布局生成一个初始版本,然后手动调整关键节点和连线。自动布局工具里,分层布局适合有明确上下游关系的图,力导向布局适合节点之间关系复杂、没有明显层级的图。
具体操作上,我会先用自动布局跑一遍,观察哪些节点被放在了不合理的位置。然后锁定这些节点,重新跑布局,让其他节点围绕它们排列。通常迭代两到三次就能得到一个可用的布局。
注意:不要追求“完美布局”。图表的第一目标是“可读”,不是“好看”。我见过有人花两个小时调整节点位置,就为了让图看起来对称。这种时间投入产出比极低。只要读者能顺畅地沿着连线读完,布局就是合格的。
3.4 标注与注释:让图表自己解释自己
一张好的 diagram-design 作品,应该做到“不需要作者在旁边讲解,读者自己就能看懂”。这要求图表具备完善的标注和注释。
标注分三种:节点标注、连线标注、区域标注。节点标注说明节点的名称和类型;连线标注说明关系的协议、频率、数据格式;区域标注说明一组节点的共同属性,比如“同一个可用区”“同一个团队负责”。
注释则用来补充无法用图形表达的信息,比如“这个服务计划在下个季度拆分”“这个数据库目前是单点,有风险”。注释的位置要靠近相关节点,用浅色背景或虚线框区分,避免和主体图形混淆。
我自己的习惯是:每张图至少包含一个“风险注释”和一个“演进注释”。风险注释指出当前架构的薄弱点,演进注释说明未来的调整方向。这样图表不仅是现状的快照,也是决策的依据。
4. 实操过程:从零构建一套可维护的图表体系
4.1 环境准备与工具链搭建
假设你现在要为一个中等规模的系统建立 diagram-design 体系,我推荐的工具链是这样的:
- 描述语言:Mermaid(嵌入文档)+ PlantUML(复杂图)
- 版本管理:Git,图表描述文件和代码一起提交
- 渲染方式:本地渲染 + CI 自动渲染
- 文档集成:Markdown 文档直接嵌入 Mermaid 代码块
为什么这样选?Mermaid 的语法简单,学习成本低,而且主流文档平台都支持直接渲染。PlantUML 的图类型更丰富,适合画状态图、时序图、部署图。两者结合,覆盖大部分场景。
环境搭建的具体步骤:
- 在项目根目录创建
docs/diagrams目录,存放所有图表描述文件。 - 安装 Mermaid CLI 和 PlantUML 的本地渲染工具,具体命令根据操作系统选择。
- 在 CI 配置里增加一个步骤,每次提交时自动渲染图表并检查语法错误。
- 在文档里用相对路径引用渲染后的图片,或者直接嵌入 Mermaid 代码块。
实操心得:图表描述文件一定要和代码放在同一个仓库里。我见过图表放在独立的文档仓库,结果代码改了三个月,图表还是旧的。放在一起,代码审查时顺便看一眼图表是否需要更新,维护成本最低。
4.2 第一张图:上下文图的绘制要点
上下文图是整套图表体系的入口。它只回答一个问题:这个系统是什么,它和外部世界怎么交互。
绘制上下文图的步骤:
- 把系统本身画成一个矩形,放在图的正中央。
- 把所有外部实体画在系统周围。外部实体包括:用户角色、外部系统、第三方服务、定时任务触发源。
- 用带箭头的线连接系统和外部实体,标注交互内容。
- 在图的角落加上图例和版本号。
上下文图里不要出现任何内部模块、数据库、中间件。这些属于下一层。我见过有人在上下文图里画了数据库,结果读者以为数据库是外部系统。
上下文图的节点数量控制在 5 到 9 个之间。太少说明系统边界没梳理清楚,太多说明抽象层级不够,需要把一些外部实体合并成“外部系统组”。
4.3 第二张图:容器图的分组策略
容器图展示系统内部的主要服务、应用、数据存储,以及它们之间的交互。这张图是开发团队最常看的图,所以准确性要求最高。
分组策略是容器图的关键。我通常按职责边界分组,而不是按技术栈分组。比如“用户服务”“订单服务”“支付服务”是按职责分组;“Java 应用”“Python 脚本”“Go 服务”是按技术栈分组。按职责分组的好处是,读者能快速理解系统的业务能力划分。
每个容器节点应该包含以下信息:名称、职责一句话、技术栈、对外接口。如果容器数量超过 15 个,考虑拆成两张图,或者把一些边缘容器合并成“其他服务”。
容器之间的连线要标注协议和方向。比如“订单服务 --HTTP--> 支付服务”表示订单服务通过 HTTP 调用支付服务。如果调用是异步的,标注“--消息-->”。
4.4 第三张图:状态图与流程图的分工
状态图和流程图经常被混用,但它们的用途完全不同。状态图描述一个实体在不同状态之间的迁移,流程图描述一个流程从开始到结束的步骤。
状态图的绘制要点:
- 每个状态用圆角矩形表示
- 状态迁移用带箭头的线表示
- 迁移条件标注在箭头旁
- 初始状态用实心圆表示,终止状态用空心圆加实心圆表示
流程图的绘制要点:
- 开始和结束用椭圆表示
- 处理步骤用矩形表示
- 判断条件用菱形表示
- 并行步骤用分叉条表示
我通常会在同一个项目里同时维护状态图和流程图,因为它们回答不同的问题。状态图回答“这个订单现在处于什么状态,下一步能变成什么”,流程图回答“用户下单后系统依次做了什么”。
4.5 图表版本管理与变更记录
图表和代码一样,需要版本管理。我的做法是:
- 图表描述文件用 Git 管理,每次变更都有 commit 记录
- 图表文件头部包含版本号和最后更新日期
- 重大变更在文档里单独记录变更原因和影响范围
- 废弃的图表不删除,移到
archive目录,保留历史记录
变更记录的价值在于:当有人问“为什么这个架构变成这样了”,你可以直接指向某次变更记录,而不是靠回忆。我见过一个团队因为没记录变更原因,半年后没人记得为什么某个服务被拆分了,导致重复讨论。
注意:图表变更后,一定要检查所有引用这张图的地方。我遇到过图表更新了,但文档里的旧版本截图没换,导致新人看了错误的架构图。建议用引用而非截图,让文档自动显示最新版本。
5. 常见问题与排查技巧实录
5.1 图表看不懂:从读者反馈反推设计问题
“这张图看不懂”是 diagram-design 最常见的反馈。但这句话本身没有信息量,你需要追问具体哪里看不懂。我通常会把“看不懂”拆成四类问题:
| 反馈类型 | 可能原因 | 解决方向 |
|---|---|---|
| 不知道某个形状是什么意思 | 图例缺失或不完整 | 补充图例,确保每个非标准元素都有说明 |
| 不知道连线代表什么关系 | 连线类型混用或未标注 | 统一连线语义,增加连线标注 |
| 找不到关键路径 | 布局混乱或层级不清 | 重新分层,突出主路径,弱化次要路径 |
| 不知道从哪开始看 | 缺少入口标识或阅读顺序 | 增加起点标记,用编号或颜色引导阅读顺序 |
追问的时候,最好让读者指着图说“我从这里看到这里,然后不知道下一步看哪里”。这样你能精确定位是布局问题还是标注问题。
5.2 图表太乱:节点过多的拆分策略
节点过多是图表可读性的头号杀手。我的经验是:一张图里的节点数量超过 20 个,可读性就会急剧下降。超过 30 个,基本没人愿意看。
拆分策略有三种:
第一种是按层级拆。把一张大图拆成上下文图、容器图、组件图三层。每层只展示对应层级的信息。
第二种是按场景拆。把一张全量图拆成“正常流程”“异常流程”“管理流程”等多张图。每张图只讲一个场景。
第三种是按区域拆。把系统按业务域拆成多个子图,每个子图展示一个业务域的内部结构,再用一张总图展示业务域之间的关系。
我通常优先用第一种,因为层级拆分最符合读者的认知习惯。如果层级拆分后单层节点还是太多,再用第二种或第三种。
5.3 图表过时:建立自动更新机制
图表过时是 diagram-design 里最隐蔽的问题。因为图表不像代码,不会报错,所以很容易被忽略。等发现的时候,往往已经误导了很多人。
建立自动更新机制的关键是让图表和源头关联。具体做法:
- 如果图表描述的是接口关系,从接口定义文件自动生成节点和连线
- 如果图表描述的是部署拓扑,从部署配置文件自动生成
- 如果图表描述的是数据模型,从数据库 schema 自动生成
做不到全自动的话,至少做到半自动:在 CI 里增加一个检查步骤,当相关配置文件变更时,提醒更新图表。我自己的项目里,每次合并请求如果修改了服务配置文件,CI 会自动在评论里提醒“请检查架构图是否需要更新”。
5.4 团队协作:统一图表规范落地经验
团队协作里最大的问题是“每个人画图风格不一样”。解决这个问题不能靠口头约定,要靠规范文档 + 模板 + 审查。
规范文档要包含:形状语义、颜色语义、连线语义、布局规则、标注规则、文件命名规则。模板要提供常用图类型的空白模板,新人直接套用。审查要在代码审查里增加图表审查项,确保新提交的图表符合规范。
我自己的团队里,图表规范文档放在项目 wiki 的显眼位置,新人入职第一周就要读一遍。每次有人提交不符合规范的图表,审查者会指出具体违反哪一条,而不是笼统地说“不好看”。这样执行三个月,团队里的图表风格基本就统一了。
实操心得:规范不要定得太细。我见过一份 30 页的图表规范,结果没人看。规范控制在 5 页以内,只规定最关键的形状、颜色、连线语义,其他留给个人发挥。规范越简单,执行率越高。
5.5 工具迁移:从画布工具切换到文本工具的经验
从拖拽式工具切换到文本驱动工具,最大的障碍是“不直观”。拖拽式工具里,你拖一个矩形出来就能看到;文本工具里,你要写一行代码才能看到一个矩形。
我的迁移经验是分阶段切换。第一阶段,新图用文本工具画,旧图保持不动。第二阶段,旧图需要修改时,顺便迁移到文本工具。第三阶段,所有图都迁移完成后,统一用文本工具维护。
迁移过程中,最大的坑是布局调整。文本工具的自动布局往往不如手动拖拽好看。我的应对方法是:先用自动布局生成初稿,然后通过调整节点顺序、增加不可见连接、设置分组等方式微调布局。通常调整五六次就能达到可接受的效果。
另一个坑是团队接受度。有些同事习惯了拖拽,对写代码画图有抵触。我的做法是:先在一个小项目里试点,展示文本工具的优势(版本控制、复用、自动生成),等大家看到好处后再推广。强制推广往往适得其反。
6. 进阶技巧:让图表成为项目资产而非负担
6.1 图表复用:建立节点库和样式库
当项目里的图表数量超过十张,复用就变得非常重要。我通常会在图表描述文件里定义一套节点库和样式库,所有图表引用这些定义,而不是每次重新写。
节点库包含常用实体的定义,比如“用户服务”“订单数据库”“消息队列”。样式库包含常用视觉样式的定义,比如“正常状态”“异常状态”“废弃状态”。这样当某个服务的名称或样式需要调整时,只需要改一处,所有引用它的图表自动更新。
复用不仅节省时间,更重要的是保证一致性。我见过同一个服务在不同图表里名字不一样,导致读者以为是两个不同的服务。有了节点库,这种问题就不会出现。
6.2 图表嵌入文档:让文档和图表同步更新
图表嵌入文档有两种方式:图片嵌入和代码嵌入。图片嵌入简单,但容易过时;代码嵌入复杂,但永远同步。
我推荐代码嵌入。具体做法是:在 Markdown 文档里直接写 Mermaid 代码块,文档渲染时自动生成图表。这样图表和文档在同一个文件里,改文档的时候顺便改图表,不会出现“文档更新了图表没更新”的情况。
如果文档平台不支持 Mermaid 渲染,可以用 CI 在构建时把 Mermaid 代码块替换成渲染后的图片。这样文档里看到的还是图片,但源头是代码,保证了同步。
6.3 图表驱动开发:先画图再写代码
这是 diagram-design 里我最推崇的实践:在写代码之前先画图。画图的过程就是设计的过程。当你把节点和连线画出来的时候,很多设计问题会提前暴露。
比如,你画容器图的时候发现两个服务之间需要双向调用,这可能意味着职责划分有问题。你画状态图的时候发现某个状态没有出口,这可能意味着业务逻辑有漏洞。你画数据流图的时候发现数据需要经过五个服务才能到达目的地,这可能意味着架构过于复杂。
先画图再写代码,还有一个好处是:图表可以作为代码审查的参考。审查者对照图表看代码,更容易发现实现和设计不一致的地方。
6.4 图表评审:把图表纳入技术评审流程
图表评审是保证图表质量的有效手段。我通常会在技术评审里增加一个“图表评审”环节,由图表作者讲解,其他人提问。
评审的重点不是“好不好看”,而是“准不准确”“完不完整”“清不清晰”。具体问题包括:节点是否遗漏、关系是否正确、异常路径是否覆盖、图例是否完整、读者能否独立理解。
评审意见要记录在案,作者根据意见修改后再次评审。我自己的经验是,一张重要的架构图通常需要两到三轮评审才能定稿。虽然前期投入时间多,但后期因为图表不清导致的沟通成本会大幅降低。
6.5 图表度量:用数据评估图表质量
图表质量也可以量化。我通常用四个指标来评估:
- 节点覆盖率:图表中的节点数量占实际系统实体数量的比例。低于 80% 说明遗漏较多。
- 关系准确率:随机抽查若干条连线,验证是否与实际关系一致。低于 95% 说明需要重新核对。
- 读者理解时间:让一个不了解系统的人看图,记录他理解主要流程所需的时间。超过 5 分钟说明可读性有问题。
- 变更响应时间:系统变更后,图表更新所需的时间。超过一天说明维护流程有问题。
这四个指标不需要每次都测,但在重要图表定稿前测一遍,能发现很多隐藏问题。我自己的项目里,架构图定稿前都会做一次读者理解时间测试,通常能发现三到五个可读性问题。
7. 我踩过的坑和最后分享的几个技巧
第一个坑是过度设计。早期我画架构图的时候,总想把所有细节都画进去,结果图越来越复杂,最后没人看。后来我学会了“一张图只讲一件事”,把细节留给下一层图表。图表的价值在于抽象,不在于完整。
第二个坑是工具依赖。我曾经花了很多时间研究某款绘图工具的高级功能,结果换项目后工具不让用了,那些技巧全白费。后来我转向文本驱动方案,因为文本是通用的,不依赖特定工具。Mermaid 代码放到任何支持 Markdown 的地方都能渲染。
第三个坑是忽视异常路径。早期画的图只画正常流程,结果线上出问题时,维护者拿着图找不到对应的分支。后来我强制自己在每张流程图里至少画一条异常路径,在每张架构图里至少标注一个风险点。
最后分享几个小技巧。画图之前先用纸笔草拟一遍,纸笔没有工具限制,思维最自由。画完之后隔一天再看,隔一天能发现很多当时没注意到的问题。让一个不了解系统的人看图并复述,他的复述和你的设计意图之间的差距,就是图表需要改进的地方。图表描述文件里加注释,说明为什么这样画,半年后的你会感谢现在的你。
这套 diagram-design 方法我在多个项目里迭代过,从最初的手忙脚乱到现在的流程化操作,最大的体会是:图表设计不是天赋,是手艺。手艺靠的是规范、模板、评审和持续改进。你不需要成为设计师,只需要建立一套自己的图表体系,然后坚持用它。