Graphviz 作图工具

选择 Graphviz 作为作图工具,主要是想通过代码创建图标,按照 Graphviz 的代码规范就可以生成 svg 的图片。当然,这样的工具也有很多,有些 markdown 编辑器也做了集成,比如:

  1. flowchart.js
  2. Mermaid

了解 Graphviz 的第一步是官方文档,对象和属性是画图的核心:Graphive 提供的可视化对象有哪些,以及这些对象可以设置的属性。

以属性 nodesep 来说明,它表示一个属性,作用的对象是 GraphsGraphs 表示无向图。通过文档说明,Graphviz 提供的可视化对象就显而易见。

在这里插入图片描述
下面我们利用官网的示例来操作一下,加深对 Graphviz 中对象和属性的认识。建议大家在可视化界面下原型查看效果。

node

在 Graphviz 中表示独立的元素,流程图的关键步骤。形状、大小、颜色、边界都是它的基本属性。如果存在多个 node 元素,页面上也可以控制多个 node 水平或垂直布局、间距、位置等。

元素水平布局

digraph {nodesep=0.1;node1; node2; node3;
}

三个节点是水平排列的,属性 nodesep 控制两个相邻节点的间距,间距单位是 inch 英尺。另外,这三个节点属于相同的 rank,如果继续增加 node4、node5,节点不会发生换行,而是会一直水平向后延伸。

在这里插入图片描述

元素垂直布局

graph {rankdir="TB"ranksep=".3 equally"node1 -- node2 -- node3;// node1 -- node2 -- node3 [ style="invis" ];
}

graph 表示无向图,digraph 表示有向图,两者没有明显差别。无方向的连线使用 -- 表示,图中的三个节点处于不同的 rankrankdir 指定从上到下排列,ranksep 指定相邻节点的间距。

在这里插入图片描述

某些情况下,我们并不希望看到节点间的连线,我们只是想表达一种并列关系,可以通过设置 edge 属性实现隐藏效果。Graphviz 中代码注释也是 //,注释掉的代码就是隐藏连线的实现。

水平垂直布局

graph {rankdir="TB"ranksep=".3 equally"edge [ style="invis" ]node1 -- node2;{ rank="same" node2 -- node3 };
}

统一设置 edge 对象属性,通过 rank 指定 node2、node3位于同一层,最终效果如下图。rank 简单理解为元素按照 rankdir 的方向排列,通过指定 rank 将多个元素固定在同一行。
在这里插入图片描述

下面是正三角形布局,和上面略有差异。下面要实现 node1 和 node2 在竖直方向对齐,绘制直接三角形。

graph {rankdir="TB"ranksep=".3 equally"node1 -- node2;node1 -- node3;{ rank="same" node2 -- node3 };
}

在这里插入图片描述

我们可以依赖 group 属性:如果两个节点设置了相同的 group ,节点间的连线会尽量保持直线。

下面的代码,如果给 node3 也指定相同的 group,直角的效果就会消失。

graph {rankdir="TB"ranksep=".3 equally"node1 [ group="g1" ]node2 [ group="g1" ]node1 -- node2;node1 -- node3;{ rank="same" node2 -- node3 };
}

在这里插入图片描述

使用 weight 也可以实现相同的效果,指定的 weight 值越大,节点间的连线就越短、越值、越垂直。下面代码绘制的效果和上图完全相同。

graph {rankdir="TB"ranksep=".3 equally"node1 -- node2 [ weight=2 ];node1 -- node3;{ rank="same" node2 -- node3 };
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打印字节流和字符流

打印字节流和字符流 printStream/ printWriter的构造器和方法都是一样的 package printfile;import java.io.FileOutputStream; import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.nio.charset.Charset;public class Prin…

Postgresql中的C/C++混编(JIT)

1 Postgresql编译JIT 整体上看使用了GCC、G编译文件,最后用G汇总: GCC编译的三个.o文件llvmjit、llvmjit_deform、llvmjit_expr llvmjit.c -> llvmjit.o gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -…

深入探索地理空间查询:如何优雅地在MySQL、PostgreSQL及Redis中实现精准的地理数据存储与检索技巧

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

基于Springboot实现房屋租赁租房平台系统项目【项目源码+论文说明】分享

基于Springboot实现房屋租赁租房平台系统演示 摘要 在网络高速发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,房东只能以用户为导向,所以开发租房网…

实现协议互通:探索钡铼BL124EC的EtherCAT转Ethernet/IP功能

钡铼BL124EC是一种用于工业网络通信的网关设备,专门用于将EtherCAT协议转换成Ethernet/IP协议。它充当一个桥梁,连接了使用不同协议的设备,使它们能够无缝地进行通信和互操作。 具体来说,BL124EC通过支持EtherCAT(以太…

docker安装运行环境相关的容器

docker安装常用软件步骤 docker安装Tomcat:latest 2023-10-09 1)搜索镜像 以Tomcat为例子,先去官网仓库搜索https://hub.docker.com/search?qtomcat 或者直接命令查询 docker search tomcat2)拉取镜像 docker pull tomcat3&#xff09…

CamoDroid 与 Frida Android动态分析工具搭建流程(linux)

CamoDroid 与 Frida Android动态分析工具搭建流程(linux) 写在前面 这个东西配置起来比较复杂,其实最主要就是配置frida,如果你之前就使用过frida框架的话问题就不是很大 介绍camodroid CamoDroid 是一个开源和开放架构的 And…

力扣第 365 场周赛虚拟参赛

有序三元组中的最大值 I class Solution { public:long long maximumTripletValue(vector<int>& nums) {vector<long long> num;for (auto &item:nums) {num.push_back(item*1ll);}long long z 0,f 1000000;long long ans 0;long long maxx num[0],mi…

基于指数趋近律的机器人滑模轨迹跟踪控制算法及MATLAB仿真

机械手是工业制造领域中应用最广泛的自动化机械设备&#xff0c;广泛应用于工业制造、医疗、军工、半导体制造、太空探索等领域。它们虽然形式不同&#xff0c;但都有一个共同的特点&#xff0c;即能够接受指令&#xff0c;并能准确定位到三维(或二维)空间的某一点进行工作。由…

NoSQL之Redis 主从复制配置详解及哨兵模式

目录 1 Redis 主从复制 1.1 主从复制的作用 1.2 主从复制流程 2 搭建Redis 主从复制 2.1 安装 Redis 2.2 修改 Redis 配置文件&#xff08;Master节点操作&#xff09; 2.3 修改 Redis 配置文件&#xff08;Slave节点操作&#xff09; 2.4 验证主从效果 3 Redis 哨兵模…

PHP 伪协议:使用 php://filter 为数据流应用过滤器

文章目录 参考环境PHP 伪协议概念为什么需要 PHP 伪协议&#xff1f; php://filter概念格式 基本使用普通读写file_get_contents 与 file_put_contentsinclude 过滤器的基本使用base64 的编码与解码rot13 加解密rot13 算法string.rot13 过滤器列表多个过滤器的使用注意事项 处理…

TensorFlow案例学习:对服装图像进行分类

前言 官方为我们提供了一个 对服装图像进行分类 的案例&#xff0c;方便我们快速学习 学习 预处理数据 案例中有下面这段代码 # 预处理数据&#xff0c;检查训练集中的第一个图像可以看到像素值处于0~255之间 plt.figure() # 创建图像窗口 plt.imshow(train_images[0]) # …

【RabbitMQ】初识消息队列 MQ,基于 Docker 部署 RabbitMQ,探索 RabbitMQ 基本使用,了解常见的消息类型

文章目录 前言一、初识消息队列 MQ1.1 同步通信1.2 异步通信1.3 MQ 常见框架及其对比 二、初识 RabbitMQ2.1 什么是 RabbitMQ2.2 RabbitMQ 的结构 三、基于 Docker 部署 RabbitMQ四、常见的消息类型五、示例&#xff1a;在 Java 代码中通过 RabbitMQ 发送消息5.1 消息发布者5.2…

软件测试「转行」答疑(未完更新中)

⭐ 专栏简介 软件测试行业「转行」答疑&#xff1a; 如果你对于互联网的职业了解一知半解&#xff01;不知道行业的前景如何&#xff1f;对于众说纷纭的引流博主说法不知所措&#xff01;不确定这个行业到底适不适合自己&#xff1f; 那么这一篇文章可以告诉你所有真实答案&a…

【网络安全】关于CTF那些事儿你都知道吗?

关于CTF那些事儿你都知道吗&#xff1f; 前言CTF那些事儿内容简介读者对象专家推荐 本文福利 前言 CTF比赛是快速提升网络安全实战技能的重要途径&#xff0c;已成为各个行业选拔网络安全人才的通用方法。但是&#xff0c;本书作者在从事CTF培训的过程中&#xff0c;发现存在几…

<el-input> textarea文本域显示滚动条(超过高度就自动显示)+ <el-input >不能正常输入,输入了也不能删除的问题

需求&#xff1a;首先是给定高度&#xff0c;输入文本框要自适应这个高度。文本超出高度就会显示滚动条否则不显示。 <el-row class"textarea-row"><el-col :span"3" class"first-row-title">天气</el-col><el-col :span&…

Selenium进行无界面爬虫开发

在网络爬虫开发中&#xff0c;利用Selenium进行无界面浏览器自动化是一种常见且强大的技术。无界面浏览器可以模拟真实用户的行为&#xff0c;解决动态加载页面和JavaScript渲染的问题&#xff0c;给爬虫带来了更大的便利。本文将为您介绍如何利用Selenium进行无界面浏览器自动…

如何绘制Top级美图?20+案例分享

如何绘制Top级美图&#xff1f;20案例分享 #R语言绘图128个 #图表美化47个 工欲善其事&#xff0c;必先利其器&#xff01; R语言绘图爱好者赶紧看过来&#xff01;画图时选择称手的R包&#xff0c;是高效绘制美图的First Step&#xff01;今天分享一波科研美图绘制所需R包…

TensorFlow入门(九、张量及操作函数介绍)

在TensorFlow程序中,所有的数据都由tensor数据结构来代表。即使在计算图中,操作间传递的数据也是Tensor tensor在TensorFlow中并不是直接采用数组的形式,它只是对TensorFlow中计算结果的引用。也就是说在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程 一个…