什么神仙操作,用代码能画这样的图

news2024/11/16 22:28:32

大家好,我是车辙。不知道同学们画流程图或者时序图一般用的什么软件?Visio 还是 Process On 或者语雀?

因为公司原因,在很多情况下,我一般用语雀画流程图或者思维导图。不过凡事也有例外,对于比较简单的图,也可以用代码画。什么,代码也能用来画图?是的,而且还不会比你自己画的差呢!接下来,我会用以下几个方面来讲解下代码画图。

image.png

为什么要用代码画图

  1. 不需要繁琐的软件,你只要会使用 Markdown 即可。而且现在市面上的写作软件基本都支持 Markdown
  2. 相比于使用鼠标拖拽,这种画图方式非常的简单。你不必再去考虑排版对齐问题,它能帮你自动调整,节约不少时间。
  3. 相比于ProcessOn等收费软件,用代码画图完全免费。
  4. 组内协同时,不用考虑对方和你用的是不是同一个软件,你可以直接把代码拷给你的同事,或者建立起画图的Git库,提交就可以。

如何使用代码画图

先前我们提到过,只需要用支持Markdown的软件即可。其实我们用的是叫做Mermaid的工具,它是一个基于javascript的图表绘制工具,可以通过Markdown来进行展现,如果你对Markdown很熟悉,学习它会非常简单。

If you are familiar with Markdown you should have no problem learning Mermaid’s Syntax

用 Mermaid 画流程图

什么是流程图

通过图形来对某个特定业务或场景的整体的流程走向进行规范化的梳理和绘制,从而使相关方能够通过最为直观的图形方式来明确知道整个流程的概况以及每个流程的前后关系,让我们能够更加快速方便地了解特定场景、业务的流程关系的一种图形。

最基本流程图

首先我们来画最基本的流程图

graph LR  
    A(开始) --> B[A出门玩耍] --> C((回家))
开始
A出门玩耍
回家

从上面可以看出存在A、B、C三个节点,每个节点中都是一个步骤。其中括号()表示开始动作,中括号[]表示中间的步骤,双括号(())表示结束。

加判断条件

流程图中除了最基本的,还存在判断条件,那该怎么写呢?

graph LR  
    A(开始) --> B[A出门] --> C{"天会不会下雨?"}
    C{"天会不会下雨?"}-->|会| D((回家))
    C{"天会不会下雨?"}-->|不会| E[继续]
不会
开始
A出门
天会不会下雨?
回家
继续

你可以使用大括号{}用于表示判断条件,在节点C后通过||表示判断条件即可。

对C节点的文案加引号是由于?号是特殊字符,不加会报错

布局方式

另外 graph LR表示这个图将会以从左到右布局。如果你想从右到左布局,可以使用RL

graph RL  
    A(开始) --> B[A出门玩耍] --> C((回家))
开始
A出门玩耍
回家

如果想从上到下,可以以TB(Top、Bottom)布局

graph TB  
    A(开始) --> B[A出门玩耍] --> C((回家))
开始
A出门玩耍
回家

箭头形状

如果觉得这个箭头太难看了,可以使用虚线箭头-.->,想让箭头变长,中间加个点即可=-..->

开始
A出门玩耍
回家

如果希望用其他的箭头,可以使箭头加粗 ==> 或者不带箭头 ---

开始
A出门玩耍
回家

另外:为节点取名为 ABC 其实是不太合适的。因为节点很多时容易产生混淆,不方便后续使用和阅读,建议起有意义的名字。

额外的骚操作

除了这些,还有些其他的骚操作,比如节点添加超链接文案

graph LR  
    A(开始) -- 123 --> B[A出门玩耍] --- D((回家))
    click B "https://www.baidu.com" _blank
123
开始
A出门玩耍
回家

最绝的是你可以往节点中添加css

graph LR  
    A(开始) -- 123 --> B[A出门玩耍] --- D((回家))
    style A fill:#f9f,stroke:#333,stroke-width:4px
123
开始
A出门玩耍
回家

用Mermaid 画时序图

什么是时序图

时序图,它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。举个例子就是微信的网页授权流程。

最基本时序图

老规矩,先来个简单的支付宝转账。

sequenceDiagram
autonumber
用户 ->> 支付宝 : 发起转账
支付宝 ->> 网银 : 发起转账
网银 -->> 支付宝 : 转账成功
支付宝 -->> 用户 : 转账成功
用户 支付宝 网银 发起转账 1 发起转账 2 转账成功 3 转账成功 4 用户 支付宝 网银

解释下:

  1. 可以使用譬如"用户"、"服务端"来表示一个泳道。
  2. 可以使用 ->>表示箭头,而-->>表示同步返回。
  3. 通过autonumber 开启执行序号展示。

消息组合

它同时支持它提供了alt/else、loop来进行时序图的消息组合。

sequenceDiagram
用户 ->> 支付宝 : 发起转账
支付宝 ->> 网银 : 发起转账
alt  转账成功
        网银 -->> 支付宝 : 返回转账ID
        支付宝 -->> 用户 : 转账成功
else 转账失败
    网银 -->> 支付宝 : 返回转账失败原因
    loop 3次 
    支付宝 ->> 网银: 再次进行重试
    end
end
用户 支付宝 网银 发起转账 1 发起转账 2 返回转账ID 3 转账成功 4 返回转账失败原因 5 再次进行重试 6 loop [3次] alt [转账成功] [转账失败] 用户 支付宝 网银
  1. 可以通过alt 进行条件判断,如果成功直接返回。
  2. else表示另外的情况.
  3. 通过Loop表示循环次数。另外,在循环中同样存在着alt判断,为了方便观察,我就没有把他写出来。

背景色

我们还可以给时序图添加背景色。

sequenceDiagram
rect rgb(191, 223, 255)
用户 ->> 支付宝 : 发起转账
支付宝 ->> 网银 : 发起转账
alt  转账成功
        网银 -->> 支付宝 : 返回转账ID
        支付宝 -->> 用户 : 转账成功
else 转账失败
    网银 -->> 支付宝 : 返回转账失败原因
end
end
用户 支付宝 网银 发起转账 1 发起转账 2 返回转账ID 3 转账成功 4 返回转账失败原因 5 alt [转账成功] [转账失败] 用户 支付宝 网银

通过 rect rgb(191, 223, 255)end标签,即可完成背景色操作。

微信网页授权时序图

最后,我们看下用Mermaid画微信网页授权登录的时序图。

用户 浏览器端 服务端 微信端 请求登录 1 请求构建授权链接 2 生成授权链接 3 返回授权链接 4 请求网页授权 5 用户是否同意授权 6 重定向到Redirect地址 7 获取Code 8 code 9 通过Code请求获取 AccessToken 10 返回AccessToken 11 通过AccessToken请求获取用户信息 12 返回用户信息 13 登录 14 登录成功,返回用户信息 15 用户 浏览器端 服务端 微信端

用Mermaid 画类图

什么是类图

类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等

最基本类图

比如我们首先写一个动物类

classDiagram
    class 老虎{
        +Integer age
        +String name
        
        +run(mile)
        +sleep() int
    }
老虎
+Integer age
+String name
+run(mile)
+sleep() : int

其中 agename 表示属性,runsleep表示方法,int 表示返回值的类型。而其他的符号可以表示它的可见性:

  • + Public
  • - Private
  • # Protected
  • ~ Package/Internal

接口和枚举

如果你是接口,可以这么写

classDiagram
class 动物{
    <<interface>>
    run()
}
«interface»
动物
run()

如果是枚举,可以这么写

classDiagram
class Color{
    <<enumeration>>
    RED
    BLUE
    GREEN
    WHITE
    BLACK
}
«enumeration»
Color
RED
BLUE
GREEN
WHITE
BLACK

类之间的关系

类之间都会存在某种关系,比如说继承,实现等。在mermaid中分别用这些标识各种关系。

Dependency 依赖
Inheritance 继承
Realization 实现
Association 关联
Aggregation 聚合
Composition 组合
classK
classL
classA
classB
classM
classN
classG
classH
classE
classF
classC
classD

就以老虎继承动物举例:

classDiagram
    direction RL
    class 老虎{
        +Integer age
        +String name
        
        +run(mile)
        +sleep() int
    }
    class 动物{
        +Integer age
        +String name
        
        +run(mile)
        +sleep() int
    }
    老虎 --|> 动物 : Inheritance 继承
Inheritance 继承
老虎
+Integer age
+String name
+run(mile)
+sleep() : int
动物
+Integer age
+String name
+run(mile)
+sleep() : int

用Mermaid 画甘特图

什么是甘特图

甘特图(Gantt chart)又称为横道图、条状图(Bar chart)。其通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。

最基本甘特图

gantt
    title 甘特图基础演示
    dateFormat  YYYY-MM-DD
    section 张三
    接口1完成       : a1, 2014-01-01, 30d
    接口2完成       : after a1  , 20d
    
    section 车辙
    接口3完成      :2014-01-12  , 12d
    接口3完成      : 24d
Mon 06 Mon 13 Mon 20 Mon 27 Mon 03 Mon 10 Mon 17 接口1完成 接口2完成 接口3完成 接口3完成 张三 车辙 甘特图基础演示

其中,section指人或者小组,每个section中都存在若干个task
例如 接口1完成 这个taskIda1,开始日期为2014-01-01,持续30d.

添加标识状态

你也可以用字段标识它的状态,比如done表示完成,active表示活跃中

gantt
    title 甘特图基础演示
    dateFormat  YYYY-MM-DD
    section 张三
    接口1完成       : done,a1, 2014-01-01, 30d
    接口2完成       : active,after a1  , 20d
    
    section 车辙
    接口3完成      :2014-01-12  , 12d
    接口3完成      : 24d
Mon 06 Mon 13 Mon 20 Mon 27 Mon 03 Mon 10 Mon 17 接口1完成 接口2完成 接口3完成 接口3完成 张三 车辙 甘特图基础演示

用Mermaid 画饼状图

Mermaid 还可以用来画饼状图,这不比用Python生成简单?

pie title 颜值占比
    "车辙" : 37
    "吴彦祖" : 36
    "马老师" : 27
37% 36% 27% 颜值占比 车辙 吴彦祖 马老师

代码画图的缺点

和低代码类似,代码画图最大的问题只能画出相对简单的图,一旦业务复杂,用代码操作,往往会变的很不好画。

总结

本文介绍了如何使用Mermaid进行画图,除了上述的内容外,Mermaid还能支持更多类型的图,当然这些内容就需要大家去官网查看了。官网地址

如果这篇文章对您有所帮助,可以关主《车辙的编程学习圈》,里面还有 几十G 的视频资料、电子书可以免费领取。

我是车辙,掘金小册《SkyWalking》作者,一名常被HR调侃为XX杨洋的互联网打工人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你的电路是抄来的还是算出来的?

在你看这篇文章之前&#xff0c;我想提出几点说明&#xff1a; &#xff08;1&#xff09;最近在看拉扎维的书&#xff0c;写下来这些东西&#xff0c;这也只是我个人在学习过程中的一点总结&#xff0c;有什么观点大家可以相互交流&#xff1b;&#xff08;2&#xff09;不断的…

立创eda专业版学习笔记(3)(隐藏部分飞线)

又到了喜闻乐见的隐藏gnd飞线环节&#xff0c;我发现这个专业版的操作和标志版不一样&#xff0c;我想试一试这个标题的搜索结果&#xff0c;发现有用的结果还是很少&#xff0c;于是我也随便总结了一下&#xff0c;算是添砖加瓦吧。 原来的飞线是这个样子的&#xff1a; 现在我…

巧妙解决appleid问题答案忘了的问题

先说下这个问题解决办法的目标——主要是为了释放被占用的appleid邮箱&#xff0c;而如果你想保留该appleid并且正常使用的话&#xff0c;那么需要付出一点代价&#xff0c;也是可以做到的。 我最近就碰到这种情况&#xff0c;某个邮箱被appleid占用了&#xff0c;问题答案因为…

从实战出发,聊聊缓存数据库一致性

在云服务中&#xff0c;缓存是极其重要的一点。所谓缓存&#xff0c;其实是一个高速数据存储层。当缓存存在后&#xff0c;日后再次请求该数据就会直接访问缓存&#xff0c;提升数据访问的速度。但是缓存存储的数据通常是短暂性的&#xff0c;这就需要经常对缓存进行更新。而我…

Linux常用命令——lsb_release命令

在线Linux命令查询工具 lsb_release 显示发行版本信息 补充说明 LSB是Linux Standard Base的缩写&#xff0c;lsb_release命令用来显示LSB和特定版本的相关信息。如果使用该命令时不带参数&#xff0c;则默认加上-v参数。 -v 显示版本信息。 -i 显示发行版的id。 -d 显示该…

2023 Real World CTF 体验赛 --- wp

文章目录misc&#x1f411;了拼&#x1f411;webEvil MySQL ServerBe-a-Language-ExpertBe-a-Wiki-HackerYummy ApiApacheCommandTextmisc &#x1f411;了拼&#x1f411; 游戏类题目&#xff0c;直接打开js文件搜索rwctf&#xff0c;发现flag rwctf{wellcome_to_the_rwct…

跟着开源项目学java8-从支持最大密码重试次数的提交看redis的场景化使用和基于jdk的schedule的异步延迟日志记录策略

我们这里要实现的功能是登录时添加账号登录错误时最大错误次数和锁定时间&#xff0c;功能不复杂&#xff0c;这次提交里面我们主要来看下一个项目里面一个业务功能怎样写更加优雅 核心实现 我们先来看核心实现的思路 首先是 login 方法重写&#xff0c;进入 loadUserByUser…

【vue2】Vue Cli脚手架与VueTools的安装详解

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;Vue Cli脚手架与VueTools的安装详解 目录 一、vue-cli脚手架工具的安装及文件介绍 1.v…

ArcGIS基础实验操作100例--实验72土地利用变化分析

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验72 土地利用变化分析 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

ArcGIS 制图流程 非常详细

如何在ArcMap中从头到尾制作一幅专题图&#xff1f;你可以看本编教程&#xff0c;从准备数据到最终导出成图&#xff0c;一步一步进行操作&#xff0c;一定可以教会你。 至于为何使用英文版软件&#xff0c;你如果作图就会知道一般经纬度都是利用英文显示&#xff0c;不然最终…

微信小程序实现左边图片右边文字效果

实现的效果&#xff1a; xml布局文件&#xff1a; <view class"chuxingItem"> <image class"img" src"/pages/image/banche.png"></image> <view style"font-size: 30rpx;margin-left: 15rpx;">班车查询</…

Leetcode:513. 找树左下角的值(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 递归&#xff1a; 原理思路&#xff1a; 层序遍历&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至…

kaggle平台学习复习笔记 | Data Visualization | Seaborn

目录1.hello Seaborn2.Line Charts3.Bar Charts and Heatmaps4.Scatter PlotsDistributions5.Choosing Plot Types and Custom Styles1.hello Seaborn import pandas as pd pd.plotting.register_matplotlib_converters() import matplotlib.pyplot as plt %matplotlib inline…

阿里云服务器安装mysql数据库教程

阿里云服务器怎么安装mysql数据库&#xff1f;阿里云服务器ECS如何安装mysql数据库教程。主机教程网下面就来分享一下阿里云服务器安装mysql数据库教程。 第一步 1、登录个人的阿里云服务管理终端 2、点击进入远程连接&#xff0c;输入之前设置的远程登录密码&#xff08;如…

能够激发创作灵感的笔记软件,强大在哪里? #RoamResearch

今天的人类知识体系&#xff0c;已经汇聚成了一个浩瀚的信息与思想的海洋&#xff0c;信息量呈指数级增长&#xff0c;如果能够解决潜在的协作问题&#xff0c;这会给个体带来巨大的机会。怎么有效利用信息&#xff1f;如何搭建自己的知识体系&#xff1f;这些都是信息爆炸的时…

在ubuntu系统上用pyinstaller打包yolov5项目代码

目录0. 背景1. 创建虚拟环境2. pyinstaller打包2.1. 生成并修改spec文件2.2. 重新生成二进制文件3. 测试0. 背景 最近需要在ubuntu 18.04上将自己写的一些基于yolov5的项目代码打包成二进制文件&#xff0c;方便部署的同时也尽量减少暴露源码。 参考网上的很多教程&#xff0…

Node.JS(4)--模块、exports和module

文章目录模块核心模块文件模块基本数据类型引用数据类型exports和module.exports的关系模块 分为两大类 核心模块 由node引擎提供的模块 核心模块的标识就是模块的名字 var fsrequire("fs");文件模块 由用户自己创建的模块文件模块的标识就是文件的路径&#x…

一个专注推荐.Net开源项目的榜单

大家好&#xff0c;我是编程乐趣&#xff0c;从7月份开始推荐开源项目&#xff0c;已经推荐了接近100个开源项目了&#xff0c;其中绝大部分是有关.Net的开源项目&#xff0c;也受到大家非常多人的喜欢。 由于公众号不方便查询&#xff0c;很多人又想了解更多的开源项目&#…

C++【多线程】

文章目录一、什么是线程二、创建线程一、什么是线程 线程在进程内部执行&#xff0c;是OS调度的基本单位。 在堆区上存在下面一种数据结构 struct vm_area_struct{ //用来记录这块空间的起始和终止。unsigned long vm_start;unsigned long vm_end;//其实这是一个双向链表中的结…

判断环形链表是否有环??返回环形链表的入口点!!

上次笔者写了一篇大概有7个题的链表相关的题目解析&#xff0c;感觉还不错&#xff0c;感兴趣的各位老铁&#xff0c;可以点一下链接进行欣赏&#xff1a;做几个与链表相关的题吧&#xff01;https://blog.csdn.net/weixin_64308540/article/details/128550685?spm1001.2014.3…