文章目录
- 简介
- 常见属性
- 聚集子图
- 节点结构
简介
Graphviz是一种思维导图格式,其文件后缀是.dot
。VS code中既有专门针对.dot的插件,也有嵌入Markdown的Graphviz插件,从我个人的使用频次来说,后者更加常用,有了Graphviz Markdown Preview,就可以在VS Code中绘制思维导图了。
在插件栏中下载安装之后,即可在markdown文件中使用,如图所示
结合示例可知,在Markdown中通过代码片来定义一个思维导图,并且指明代码片的类型为graphviz
。在代码片内部,最外层说明图的类型和名称,graph表示无向图,FF可以为任意名字。
花括号内,进入具体的图形设置。rankdir为思维导图方向,LR表示从左到右;TD表示从上到下。size表示生成导图的尺寸。
Graphviz由节点组成,节点之间用线连接,节点属性则在方括号内部声明。如果节点名字不包含空格,节点内容会默认为节点名字,若想进一步设置,可指明节点中的label
属性。如果一个节点同时连接多个节点,则多个节点用花括号聚集。
在所有节点之前的node
节点,并没有体现在图像中,其存在的意义是规范整个导图的默认属性。
其源码如下
graph FF{
rankdir=LR;
size=4
node[shape=record style=filled]
vscode--{IDE 编程效率 外观}
IDE--Julia
编程效率--{Codeium Codelf}
外观--{主题 background Power_Mode[label="Power Mode"]}
主题--{颜色主题 图标主题}
title[shape=egg label="VS Code插件" style=wedged]
}
常见属性
在上述代码中,主要涉及到shape、style等属性,其中shape即节点形状,更多可选形状可参考graphviz shapes。
其他常用的属性如下表所示,
节点属性 | 默认值 | 说明/可选值 |
---|---|---|
label | 节点名 | 节点内容 |
color | black | 边框颜色 |
fontcolor | black | 字体颜色 |
fillcolor | 无 | 填充色 |
fontsize | 14 | 字体尺寸 |
shape | 椭圆 | record, box, ellipse, circle, diamond plaintext, point, triangle, invtriangle… |
style | bold | bold, dashed, dotted, filled |
image | 无 | 背景图片地址 |
graphviz支持设置全局属性,在所有节点之前,声明一个node
节点,那么这个节点中设置的参数就是默认节点参数。此外,其他常用的全局属性如下
图属性 | 备注 |
---|---|
bgcolor | 背景色 |
fontcolor | 字体颜色,默认black |
fontname | 字体,默认Times-Roman |
fontsize | 字体尺寸,默认14 |
rank | 子图等级限制:same, min, max, sink |
rankdir | 排序方向,可选LR, TB |
compound | false |
除了节点之外,连接线也有其属性,也通过方括号进行设置,与点的区别如下,其中a--b
用于设置线,c--d
用于设置点
a--b[label="线"]
c--{d[label="点"]}
常用的线属性如下,其中箭头和箭尾的可选值可参考:箭头箭尾。
边属性 | 默认值 | 备注:可选值 |
---|---|---|
label | 描述关系 | |
color | black | 箭头颜色 |
fontcolor | black | 关系文字颜色 |
dir | forward | forward, back, both, none |
arrowhead | normal | 箭头 |
arrowtail | normal | 箭尾 |
arrowsize | 1.0 | 箭头尺寸 |
聚集子图
在Graphviz图中,每个节点都有特定的层级,如果不加说明,那么就逐级递减。通过subgraph可以将多个节点捆绑到一起。示例如下
代码如下
digraph show{
rankdir = LR;
size=5
node[shape=record color=gray]
A->{B C}
C->D
subgraph cluster_a{B D}
}
节点结构
对于Record类型的节点来说,可以通过花括号更有层次地填充内容,效果如下
代码为
digraph show{
node[shape=record color=gray]
test[label="{A|{B|{C|D}|{E|F|G}}}"]
}