安装
Mac下直接利用brew安装Graphviz即可
# 更新brew
brew update
# 安装Graphviz
brew install graphviz
安装后查看版本信息,验证安装是否成功
# 查看版本信息
dot -v
实践
无向图
// 无向图
graph graph1 {
a -- b;
b -- c;
b -- f;
a -- f;
}
可以直接通过如下命令进行渲染。典型地输出格式有:png、svg、jpeg等
# 将指定脚本文件 输出为 指定格式、指定名称的文件
dot <脚本文件名> -T <输出格式> -o <输出文件名>
# 将名为demo1.dot的脚本文件 输出为 格式为png、文件名为demo1.png的图片
dot demo1.dot -T png -o demo1.png
效果如下所示
有向图
// 有向图
digraph graph2 {
a -> b;
b -> d;
c -> b;
b -> b;
// i -> j;
// i -> k;
// 该语句与上述语句效果等价
i -> {j,k};
// x -> z;
// y -> z;
// 该语句与上述语句效果等价
{x,y} -> z;
// n1 -> m1;
// n2 -> m1;
// n3 -> m1;
// n1 -> m2;
// n2 -> m2;
// n3 -> m2;
// 该语句与上述语句效果等价
{n1, n2, n3} -> {m1, m2};
}
为方便实时预览渲染效果,我们可以在VS Code当中编写dot脚本,然后在VS Code当中安装一个名为“Graphviz (dot) language support for Visual Studio Code”的插件
至此,我们就可以实现实时预览,效果如下所示
子图
子图可以提供一个单独的上下位文用于设置图的属性
// 子图
digraph subgraphDemo {
// 设置节点的默认属性: 菱形、节点文本颜色为红色
node [shape=diamond, fontcolor="red"];
"杭州" -> "宁波";
"温州" -> "台州";
"宁波" -> "台州";
// 定义一个名为"江苏省"的子图
subgraph "江苏省" {
// 设置节点的默认属性: 六边形形、节点文本颜色为蓝色
node [shape=hexagon, fontcolor="blue"];
"南京" -> "苏州";
"苏州" -> "无锡";
"苏州" -> "扬州";
"无锡" -> "扬州";
}
"杭州" -> "嘉兴";
"温州" -> "杭州";
}
效果如下所示
集群
当子图的名称以cluster开头时,则Graphviz会将该子图标记为Cluster集群。此时布局引擎会将集群内的节点绘制在一起,并在外部使用一个矩形框对其进行包裹。需要注意的是,该特性依赖于布局引擎
// 集群
digraph clusterDemo {
"Auth Controller";
"Order Controller" -> "Order Service";
"Pay Controller" -> "Pay Service";
"Order Service" -> "Order Dao";
"Pay Service" -> "Pay Dao";
subgraph "cluster_service" {
label="Service层";
"Order Service";
"Log Service";
"Pay Service";
}
subgraph "cluster_dao" {
label="Dao层";
"Order Dao";
"Pay Dao";
}
}
效果如下所示
属性设置
Graphviz提供了丰富的属性设置,以满足不同的可视化需求,实现丰富的展示效果,下面即是一个示例
// 属性设置
digraph graph3 {
// 设置图形属性: 图形名称
label = "属性设置效果图";
// 设置图形属性: 图形名称的位置位于顶部
labelloc="t"
// 设置图形属性: 画布背景色为 蓝、黄 渐变
bgcolor = "lightblue:lightyellow";
// 设置节点的默认属性: 菱形、节点文本颜色为红色
node [shape=diamond, fontcolor="red"];
// 设置a节点的属性: 三角形、图形颜色为绿色、节的文本为指定文本
a [shape=triangle, color=green, label="Hello"];
// 设置边的默认属性: 虚线
edge [style=dashed];
a -> b;
// 设置指定边的属性: 点线、边的文本为指定文本
c -> b[style=dotted, label="21"];
// 设置指定边的属性: 箭头尾部符号为方形、箭头头部符号为V形、箭头头部尾部均绘制
b -> k[dir=both, arrowtail=box, arrowhead=vee];
// 设置指定边的属性: 箭头尾部符号为方形、箭头头部符号为V形、只绘制箭头头部
b -> i[dir=forworad, arrowtail=box,arrowhead=vee];
// 设置指定边的属性: 箭头尾部符号为方形、箭头头部符号为V形、只绘制箭头尾部
b -> j[dir=back, arrowtail=box, arrowhead=vee];
}
效果如下所示
参考文献
-
领域特定语言(2013年版) Martin Fowler著
原文始发于微信公众号(青灯抽丝):图可视化之Graphviz
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156357.html