目录

mermaid

和Markdown一样简洁易用的图表绘制工具

关于mermaid

Mermaid 可让您使用文本和代码创建图表和可视化效果。

它是一种基于 Javascript 的图表和图表工具,可呈现受 Markdown 启发的文本定义以动态创建和修改图表。 现已在大量支持markdown语法的程序中得到支持,包括Obsidian和Hugo。

如果您熟悉 Markdown,那么学习Mermaid’s Syntax应该没有问题。

流程图

基本流程图

1
2
3
4
5
graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;

方向

可能的流程图方向是:

  • TB/TD - 从上到下
  • BT - 自下而上
  • RL - 从右到左
  • LR - 从左到右

更多形状

节点形状、条件

1
2
3
4
5
6
graph LR
A[方形] -->B(圆角)
    B --> C{条件a}
    C -->|a=1| D[结果1]
    C -->|a=2| E[结果2]
    F[横向流程图]

子图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
flowchart TB
    c1-->a2
    subgraph one
    a1-->a2
    end
    subgraph two
    b1-->b2
    end
    subgraph three
    c1-->c2
    end

完整文档

饼图

1
2
3
4
5
6
pie
    title Key elements in Product X
    "Calcium" : 42.96
    "Potassium" : 50.05
    "Magnesium" : 10.01
    "Iron" :  5

状态图

“状态图是一种用于计算机科学和相关领域的图,用于描述系统的行为。状态图要求所描述的系统由有限数量的状态组成;有时情况确实如此,而在其他情况下有时这是一个合理的抽象。” ——维基百科

基本状态图

1
2
3
4
5
6
7
8
stateDiagram-v2
    [*] --> Still
    Still --> [*]

    Still --> Moving
    Moving --> Still
    Moving --> Crash
    Crash --> [*]

层级

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
stateDiagram
    direction LR
    [*] --> A
    A --> B
    B --> C
    state B {
      direction LR
      a --> b
    }
    B --> D

选择

有时您需要对两个或多个路径之间的选择进行建模,您可以使用 <<choice>> 来实现。

1
2
3
4
5
6
stateDiagram-v2
    state if_state <<choice>>
    [*] --> IsPositive
    IsPositive --> if_state
    if_state --> False: if n < 0
    if_state --> True : if n >= 0

便利贴

有时,没有什么比便利贴更能说明问题了。在状态图中也是如此。

在这里您可以选择将注释放在节点的右侧或左侧。

1
2
3
4
5
6
7
8
stateDiagram-v2
	State1: The state with a note
	note right of State1
		Important information! You can write
		notes.
	end note
	State1 --> State2
	note left of State2 : This is the note to the left.

完整文档

甘特图

甘特图是一种条形图,由 Karol Adamiecki 于 1896 年首次开发,1910 年代由 Henry Gantt 独立开发,用于说明项目进度和完成任何项目所需的时间。甘特图说明项目的终端元素和摘要元素的开始日期和完成日期之间的天数。

甘特图将每个计划任务记录为一个从左向右延伸的连续条。x 轴代表时间,y 轴记录不同的任务及其完成的顺序。

重要的是要记住,当特定于任务的日期、日期或日期集合被“排除”时,甘特图将通过向右扩展相同的天数来适应这些更改,而不是通过在内部创建间隙任务。

但是,如果排除的日期在两个设置为连续开始的任务之间,则排除的日期将被图形跳过并留空,并且在排除的日期结束后将开始下一个任务。

甘特图可用于跟踪项目完成前所需的时间,但它也可用于以图形方式表示“非工作日”,只需稍作调整。

Mermaid 可以将甘特图呈现为 SVG、PNG 或可以粘贴到文档中的 MarkDown 链接。

基本甘特图

1
2
3
4
5
6
7
8
9
gantt
    title A Gantt Diagram
    dateFormat  YYYY-MM-DD
    section Section
    A task           :a1, 2021-01-01, 30d
    Another task     :after a1  , 20d
    section Another
    Task in sec      :2021-01-12  , 12d
    another task      : 24d

语法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
gantt
    dateFormat  YYYY-MM-DD
    title       Adding GANTT diagram functionality to mermaid
    excludes    weekends
    %% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".)

    section A section
    Completed task            :done,    des1, 2014-01-06,2014-01-08
    Active task               :active,  des2, 2014-01-09, 3d
    Future task               :         des3, after des2, 5d
    Future task2              :         des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison          :crit, done, after des1, 2d
    Create tests for parser             :crit, active, 3d
    Future task in critical line        :crit, 5d
    Create tests for renderer           :2d
    Add to mermaid                      :1d

    section Documentation
    Describe gantt syntax               :active, a1, after des1, 3d
    Add gantt diagram to demo page      :after a1  , 20h
    Add another diagram to demo page    :doc1, after a1  , 48h

    section Last section
    Describe gantt syntax               :after doc1, 3d
    Add gantt diagram to demo page      :20h
    Add another diagram to demo page    :48h

完整文档

更多图表

时序图

时序图是一种交互图,它显示了进程如何相互操作以及以何种顺序运行。

1
2
3
4
sequenceDiagram
    Alice->>John: Hello John, how are you?
    John-->>Alice: Great!
    Alice-)John: See you later!

完整文档

类图

“在软件工程中,统一建模语言(UML)中的类图是一种静态结构图,它通过显示系统的类、它们的属性、操作(或方法)以及对象之间的关系来描述系统的结构.” ——维基百科

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
classDiagram
      Animal <|-- Duck
      Animal <|-- Fish
      Animal <|-- Zebra
      Animal : +int age
      Animal : +String gender
      Animal: +isMammal()
      Animal: +mate()
      class Duck{
          +String beakColor
          +swim()
          +quack()
      }
      class Fish{
          -int sizeInFeet
          -canEat()
      }
      class Zebra{
          +bool is_wild
          +run()
      }

完整文档

实体关系图

实体-关系模型(或 ER 模型)描述了特定知识领域中的相关事物。基本 ER 模型由实体类型(对感兴趣的事物进行分类)组成,并指定实体(这些实体类型的实例)之间可以存在的关系。——维基百科

1
2
3
4
erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
    CUSTOMER }|..|{ DELIVERY-ADDRESS : uses

完整文档

用户旅程图

用户旅程高度详细地描述了不同用户在系统、应用程序或网站中完成特定任务所采取的具体步骤。此技术显示当前(原样)用户工作流程,并揭示未来工作流程的改进领域。——维基百科

1
2
3
4
erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
    CUSTOMER }|..|{ DELIVERY-ADDRESS : uses

完整文档

需求图

需求图提供了需求及其相互之间和其他文档化元素之间的联系的可视化。建模规范遵循 SysML v1.6 定义的规范。

./requirement_graph.png
需求图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
requirementDiagram

    requirement test_req {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    element test_entity {
    type: simulation
    }

    test_entity - satisfies -> test_req

完整文档

mermaid官网

适用于在Obsidian打开的本文章md文件

下载地址(请自行删除后缀名.save)