当前位置: 首页 > news >正文

markdown中画图功能mermaid

mermaid

Mermaid 是一种开源的可交互式的数据可视化库,它使用 Markdown 标记语言来生成图表和流程图。它通常用于生成网站或文档中的图表。Mermaid 不属于任何公司,而是一个由社区开发和维护的开源项目。

官方网站: https://mermaid-js.github.io/

启用 markdown 绘图块与代码块非常像:

 ```mermaid··· 绘图指令 ···```

需要用到关键字mermaid

1.图(graph)

绘制流程图的第一行是流程图的声明,包含关键字 graph 和流程图方向。

流程图方向包含以下标识:

  • TB,从上到下
  • TD,从上到下
  • BT,从下到上
  • RL,从右到左
  • LR,从左到右
graph LR
A-->B  
B-->C  
C-->D  
D-->A

例如:

A
B
C
D

节点形状

  • 默认节点 A
  • 文本节点 B[bname]
  • 圆角节点 C(cname)
  • 圆形节点 D((dname))
  • 非对称节点 E>ename]
  • 菱形节点 F{fname}
graph TB  
%% 我是备注
A  
B[bname]  
C(cname)  
D((dname))  
E>ename]  
F{fname}
A
bname
cname
dname
ename
fname

连线形状

节点间的连接线有多种形状,可以在连接线中加入标签:

graph LR
箭头连接A1-->B1 
开放连接A2---B2
可以增长A2.1----B2.1标签连接A3--text---B3
箭头标签连接A4--text-->B4虚线开放连接A5-.-B5
虚线箭头连接A6-.->B6标签虚线连接A7-.text.-B7
标签虚线箭头连接A8-.text.->B8粗线开放连接A9===B9
粗线箭头连接A10==>B10
标签粗线开放连接A11==text===B11
标签粗线箭头连接A12==text==>B12
text
text
text
text
text
text
箭头连接A1
B1
开放连接A2
B2
可以增长A2.1
B2.1
标签连接A3
B3
箭头标签连接A4
B4
虚线开放连接A5
B5
虚线箭头连接A6
B6
标签虚线连接A7
B7
标签虚线箭头连接A8
B8
粗线开放连接A9
B9
粗线箭头连接A10
B10
标签粗线开放连接A11
B11
标签粗线箭头连接A12
B12

子图

markdown 的语法中,还允许用户添加子图,子图就是以 subgraph关键字标识的graph,并以end结尾,但所有节点名都是全局的,并不隔离,因此子图之间是可以相互连接的。

graph LRsubgraph g1a1*-->b1*endsubgraph g2a2*-->b2*endsubgraph g3a3*-->b3*end
a3*-->a2*

a3*–>a2* 放在哪里都可以

g3
g2
g1
b3*
a3*
b2*
a2*
b1*
a1*

2.二叉树

graph TB
A((A)) %%(())代表圆
B((B))
C((C))
D((D))
E((E))A---B
A---C
B---F(( )) %%F中为空字符
style F fill: #f100,stroke-width:0px %%设置F属性为填充为白色,边框宽度为0
B---D
C---E
C---G(( )) %%G中为空字符
style G fill: #f100, stroke-width:0px %%设置F属性为填充为白色,边框宽度为0linkStyle 2 stroke:#0ff,stroke-width:0px %%将第3条连接线的宽度设为0,就看不见这条线了
linkStyle 5 stroke:#0ff,stroke-width:0px;%%将第16条连接线的宽度设为0,就看不见这条线了
A
B
C
D
E

eg2

1
2
2
3
3
4

我常用的

结构含义

graph TB
1((36))---2((m))

1和2表示结点,括号内的内容是结点的权,或者名字。

36
m

结点含义

  • 1((1)):根
  • 21((2)):第二层的第一个结点
    • 同理31((3)):第三层的第一个结点
  • 3n1(( )):第三层第一个空结点
graph TB%%左子树
1((1))---21((2))---31((3))---41((4))
21---3n1(( ))
31---4n1(( ))%%右子树
1((1))---22((2))---3n2(( ))
22---32((3))%%隐藏结点
style 3n1 fill: #f100,stroke-width:0px
style 4n1 fill: #f100,stroke-width:0px
style 3n2 fill: #f100,stroke-width:0px
%%隐藏路径
linkStyle 3,4,6 stroke:#0ff,stroke-width:0px
1
2
2
3
3
4

采用二叉树的顺序存储——完全二叉树

graph TB%%左子树
1((1))---2((1))---4((1))---8((4))
2---5((2))---10((10))
4---9(( ))
5---11(( ))%%右子树
1((1))---3((4))%%隐藏结点
style 9 fill: #f100,stroke-width:0px
style 11 fill: #f100,stroke-width:0px
%%隐藏路径
linkStyle 5,6 stroke:#0ff,stroke-width:0px
1
1
4
1
2
4
10

3.UML类图(classDiagram)

绘制UML类图的关键字是classDiagram

类关系连线

  • 实现:<|… 示例:A<|..B:实现 类与接口的关系
  • 继承:<|-- 示例:C <|-- D:继承 子类与父类的关系
  • 组合:*-- 示例:E *-- F:组合 整体与部分的关系,部分不能离开整体单独存在。
  • 聚合:o-- 示例:G o-- H:聚合 整体与部分的关系,部分可以离开整体单独存在。
  • 关联:“1…" – "1…” 示例:I "1..*" -- "1..*" J :关联 一种拥有关系,一个类知道另一个类的属性和方法。
  • 依赖:<-- 示例:K <-- L :依赖 一种使用关系,一个类的实现需要另一个类的协助。

例如:

classDiagramclass A
class B
A <|.. B:实现class C
class D
C <|-- D:继承class E
class F
E *-- F:组合class G
class H
G o-- H:聚合class I
class J
I "1..*" -- "1..*" J :关联class K
class L
K <-- L :依赖
实现
继承
组合
聚合
关联
1..*
1..*
依赖
A
B
C
D
E
F
G
H
I
J
K
L

类成员变量和方法

classDiagram
class Student {+String name+int age- Address address+getAddress() Address-setAddress() void
}
Student
+String name
+int age
- Address address
+getAddress() : Address
-setAddress() : void

泛型

使用~代替java中的<>表示泛型

classDiagram
class A{+List~String~ list
}
A
+List<String> list

修饰词

可见性表示
public+
private-
protected#
类的注释

使用<<注释>>可以在类名上添加注释,以表示接口、抽象类、枚举等

类型表示
接口<>
抽象类<>
枚举<>
classDiagramclass A {<<interface>>
}
class B {<<abstract>>
}
class C {<<enum>>
}
class D {<<任何你想要注释的内容>>
}
«interface»
A
«abstract»
B
«enum»
C
«任何你想要注释的内容»
D

例子

classDiagram
class Run {<<interface>>+run() void
}
class Animal {<<abstract>>+run() void
}
class Dog {-Color color+eat(Food) void+run() void
}
class Color {<<enum>>-int r-int g-int b
}
class Food {+String name
}
Run <|.. Animal
Animal <|-- Dog
Dog <-- Food
Dog o--Color
«interface»
Run
+run() : void
«abstract»
Animal
+run() : void
Dog
-Color color
+eat(Food) : void
+run() : void
«enum»
Color
-int r
-int g
-int b
Food
+String name

4.时序图(sequenceDiagram)

用来描述两个或更多模块之间的交互过程首选就是时序图,markdown 也同样提供了绘制时序图的功能。

绘制时序图的关键字是sequenceDiagram

参与者–模块声明

作为多个模块之间交互过程的表现,首要的工作就是要声明共有哪些模块。

我们需要通过participant关键字进行声明,声明的顺序就是模块从左到右的展示顺序。

sequenceDiagram  
participant B  
participant A
B A B A

语法:【对象1】【连线】【对象2】:【消息内容】

sequenceDiagram
客户端-->>服务器:发起请求
客户端 服务器 发起请求 客户端 服务器

连线

markdown 时序图支持以下连线方式:

  • 无箭头实线 ->
  • 有箭头实线 ->>
  • 无箭头虚线 –>
  • 有箭头虚线 –>>
  • 带x实线 -x
  • 带x虚线 –x
server CA client 这是我的公钥 下发证书 建立连接 我要 RSA 算法加密的公钥 下发证书与公钥 上报通过公钥加密的随机数 生成对称加密秘钥 加密通信 加密通信 关闭连接 server CA client

高级特性

在实际的使用场景中,往往并不是这样简单地相互通信,而是需要分支、循环等特殊处理,markdown也同样可以支持。

循环
 loop Loop_text  ... statements...  end  
分支
alt Describing_text  
...statements...  
else  
...statements...  
end  *# 推荐在没有else的情况下使用 opt(option,选择)* opt Describing_text  
...statements...  
End
注释

注释或者称之为便签,用来对模块做额外标记。

  • 单个标签
note [right of | left of][Actor]: Text
  • 给多个模块打标签
note over [Actor1, Actor2...]:Text
Doctor Bob Bob is a patient How are you? Not so good. Fine, thank you. alt [Bob is sick] Inquire about the situation loop [Ask about patient] Thanks for asking opt [Extra response] loop [Look Bob each hour] hourly ask finished Doctor Bob

5.甘特图(gantt)

在项目管理中,甘特图是一个非常得力的好帮手,通过甘特图,我们可以对整个项目的进展情况一目了然。

用 markdown 绘制甘特图十分简单快捷。

他有以下关键字:

  • dateFormat – 日期格式
  • section – 模块声明
  • Completed – 已经完成
  • Active – 进行中
  • Future – 待后续处理
  • crit – 关键阶段

下面是一个完整的甘特图展示:

ganttdateFormat  YYYY-MM-DDtitle Adding GANTT diagram functionality to mermaidsection A sectionCompleted task             :done,    des1, 2014-01-06,2014-01-08Active task                :active,  des2, 2014-01-09, 3dFuture task                :         des3, after des2, 5dFuture task2               :         des4, after des3, 5dsection Critical tasksCompleted task in the critical line :crit, done, 2014-01-06,24hImplement parser and jison          :crit, done, after des1, 2dCreate tests for parser             :crit, active, 3dFuture task in critical line        :crit, 5dCreate tests for renderer           :2dAdd to mermaid                      :1dsection DocumentationDescribe gantt syntax               :active, a1, after des1, 3dAdd gantt diagram to demo page      :after a1  , 20hAdd another diagram to demo page    :doc1, after a1  , 48hsection Last sectionDescribe gantt syntax               :after doc1, 3dAdd gantt diagram to demo page      : 20hAdd another diagram to demo page    : 48h
2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 Completed task Completed task in the critical line Implement parser and jison Describe gantt syntax Active task Create tests for parser Add gantt diagram to demo page Add another diagram to demo page Future task Future task in critical line Describe gantt syntax Add gantt diagram to demo page Add another diagram to demo page Future task2 Create tests for renderer Add to mermaid A section Critical tasks Documentation Last section Adding GANTT diagram functionality to mermaid

参考

如何用mermaid画二叉树? - Numb的回答 - 知乎

相关文章:

markdown中画图功能mermaid

mermaid Mermaid 是一种开源的可交互式的数据可视化库&#xff0c;它使用 Markdown 标记语言来生成图表和流程图。它通常用于生成网站或文档中的图表。Mermaid 不属于任何公司&#xff0c;而是一个由社区开发和维护的开源项目。 官方网站&#xff1a; https://mermaid-js.git…...

SCI论文丨机器学习与深度学习论文

目录 第一章、ChatGPT-4o使用方法与技巧 第二章、ChatGPT-4o辅助文献检索、总结与分析 第三章、ChatGPT-4o辅助学术论文选题、创新点挖掘与实验方案设计 第四章、ChatGPT-4o辅助学术论文开题与大纲生成 第五章、ChatGPT-4o辅助学术论文写作马拉松活动介绍 第六章、ChatGPT…...

linux系统编程(二)

1、fcntl #include <unistd.h> int fcntl(int fd, int cmd, ...)fcntl用于控制文件描述符&#xff0c;该系统调用有很多功能&#xff0c;功能用cmd来控制&#xff0c;fcntl后面的参数根据cmd来填充。 我们常用的cmd有&#xff1a; F_GETFL&#xff1a;获取文件状态标志…...

uni-app登录界面样式

非常简洁的登录、注册界面模板&#xff0c;使用uni-app编写&#xff0c;直接复制粘贴即可&#xff0c;无任何引用&#xff0c;全部公开。 废话不多说&#xff0c;代码如下&#xff1a; login.vue文件 <template><view class"screen"><view class"…...

windows C#-定义抽象属性

以下示例演示如何定义抽象属性。 抽象属性声明不提供属性访问器的实现&#xff0c;它声明该类支持属性&#xff0c;而将访问器实现留给派生类。 以下示例演示如何实现从基类继承抽象属性。 此示例由三个文件组成&#xff0c;其中每个文件都单独编译&#xff0c;产生的程序集由…...

ERROR: KeeperErrorCode = NoNode for /hbase/master

原因分析 通过上面的情景模拟&#xff0c;我们可以看到报错的原因在于zookeeper中出现问题&#xff0c;可能是zookeeper中的/hbase/master被删除&#xff0c;或者是在hbase集群启动之后重新安装了zookeeper&#xff0c;导致zookeeper中的/hbase/master节点数据异常。 1. 停止…...

Deepin 23 踩坑记

&#xff08;首发地址&#xff1a;学习日记 https://www.learndiary.com/2024/12/deepin23-questions/&#xff09; Deepin 23 是由统信软件技术有限公司牵头开发一款开源 Linux 桌面操作系统&#xff08;参考链接1&#xff09;&#xff0c;从2022年发布预览版&#xff08;参考…...

mysql笔记——索引

索引 InnoDB采用了B树索引结构。 相比于二叉树&#xff0c;层级更少&#xff0c;搜索效率高。 B树中叶子节点和非叶节点都会存储数据&#xff0c;导致段页式存储中一页存储的键值减少&#xff0c;指针也会减少&#xff0c;要同样保存大量数据&#xff0c;只能增加树的高度&a…...

考研数据结构——简答题总结

数据结构的4种基本结构及特点&#xff1a; 数组&#xff08;Array&#xff09;&#xff1a; 特点&#xff1a;数组是一种线性数据结构&#xff0c;使用连续的内存空间存储元素&#xff0c;可以通过索引直接访问任意位置的元素。优点&#xff1a;访问速度快&#xff0c;因为元…...

Qt Creator 里面设置MSVC 为 utf-8

在使用 Qt Creator 和 MSVC(Microsoft Visual C++)编译器进行开发时,我们可能会遇到中文乱码的问题。这通常是由于编码设置不正确导致的。 在 Qt Creator 中,你可以通过以下步骤设置默认编码为 UTF-8: 打开 Qt Creator,选择菜单栏中的“工具”(Tools) > “选项”(Opti…...

Java阶段三06

第3章-第6节 一、知识点 理解MVC三层模型、理解什么是SpringMVC、理解SpringMVC的工作流程、了解springMVC和Struts2的区别、学会使用SpringMVC封装不同请求、接收参数 二、目标 理解MVC三层模型 理解什么是SpringMVC 理解SpringMVC的工作流程 学会使用SpringMVC封装请求…...

Helm安装Mysql8主从复制集群

目录 一、Helm安装 二、安装mysql 1、拉取镜像 2、修改配置文件 3、创建mysql-secret 4、安装 一、Helm安装 这里不再赘叙&#xff0c;具体安装请参考官网 Helm | 快速入门指南 二、安装mysql 1、拉取镜像 #添加仓库 helm repo add bitnami https://charts.bitnami.c…...

嵌入式基础:Linux C语言:Day7

重点&#xff1a; strlen()函数\strcpy()函数\strcat实现\strcmp()实现 数组的清空&#xff1a;bzero函数、memset函数 一、字符数组 <1> 概念 字符数组本质上就是一个数组&#xff0c;保存一个个字符&#xff0c;也一般用来保存字符串 字符串由多个字符组成的一个字符…...

Tablesaw封装Plot.ly实现数据可视化

上文介绍tablesaw的数据处理功能&#xff0c;本文向你展示其数据可视化功能&#xff0c;并通过几个常用图表示例进行说明。 Plot.ly包装 可视化是数据分析的重要组成部分&#xff0c;无论你只是“查看”新数据集还是验证机器学习算法的结果。Tablesaw是一个开源、高性能的Java…...

RAG与Embedding:现代NLP的核心技术

本篇文章简单梳理我在了解RAG以及Embedding技术时的想法&#xff0c;仅供参考 文章目录 1. 引言背景为什么要关注RAG与Embedding技术 2. 基础概念与原理2.1 什么是RAG (Retrieval-Augmented Generation)定义工作流程优点与适用场景 2.2 什么是Embedding定义作用 3. Embedding在…...

力扣每日一题 - 1812. 判断国际象棋棋盘中一个格子的颜色

题目 还需要你前往力扣官网查看详细的题目要求 地址 1.给你一个坐标 coordinates &#xff0c;它是一个字符串&#xff0c;表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。2.如果所给格子的颜色是白色&#xff0c;请你返回 true&#xff0c;如果是黑色&#xff…...

Map 那些事儿

1. map 的基本结构 Go 的 map 是一种哈希表&#xff0c;其核心思想是通过哈希函数将键映射到某个位置&#xff08;桶&#xff09;以存储对应的值。它主要包含以下关键部分&#xff1a; •桶&#xff08;bucket&#xff09;&#xff1a;存储键值对的容器&#xff0c;map 中的元…...

GCP Case:MountKirk Games

游戏后端 根据游戏活动动态放大或缩小。 连接到托管的nos0l数据库服务。 运行定制的linux发行版。 游戏分析平台 根据游戏活动来扩大或缩小规模直接处理来自游戏服务器的传入数据。 处理由于移动网络缓慢而迟到的数据。 通过sql查询来访问至少10tb的历史数据 处理由用户…...

[创业之路-187]:《华为战略管理法-DSTE实战体系》-1-从UTStarcom的发展历程,如何辩证的看企业初期发展太顺利中的危机

目录 一、UTStarcom&#xff08;UT斯达康&#xff09;的发展历程 1、创立与初期发展 2、快速成长与上市 3、技术创新与业务拓展 4、战略调整与持续发展 二、从UTStarcom的发展历程&#xff0c;如何辩证的看企业初期发展太顺利中的危机 1、企业初期发展的顺利表现 2、顺…...

高级数据结构-树状数组

介绍 树状数组的推导 两个基础操作 模板-acwing795. 前缀和 #include<bits/stdc.h> using namespace std;const int N 1e610; int c[N]; int lowbit(int x){return x & -x; }int query(int x){int ans 0;for(; x; x - lowbit(x)) ans c[x];return ans; }void add…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...