当前位置: 首页 > 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…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...