Python Graphviz: DOT 语言2024 年 8 月 29 日 | 阅读 6 分钟 接下来是一个抽象的理论语法,定义了DOT语言的特征。终结符以醒目的文本样式显示,非终结符以斜体显示。确切的字符以单语句表示。括号(和)在需要时表示分组。方括号[和]包含可选项。竖线|分隔选项。 关键字strict、subgraph、digraph、Graph、edge和node不区分大小写。同样,允许的方位值不是关键字,因此这些字符串可以被用作常规标识符,或者解析器将接受任何标识符。 ID是以下之一
集群和子图子图在Graphviz中扮演三个角色。首先,子图可用于表示图的结构,表明某些节点和边应将它们组合在一起。这是子图的常规角色,通常指定图部分的语义信息。它也可以为边提供一个有用的简写。例如,该规定。一个边的声明允许在边的操作符的左侧和右侧使用子图。当发生这种情况时,将从左侧的每个节点到右侧的每个节点创建一个边。 在第二个角色中,子图可以为设置属性提供上下文。例如,子图可以指定蓝色是其中定义的所有节点的默认颜色。就图绘制而言,一个有趣的例子是 这个(神秘的)子图表明,节点A、B和C应该位于同一个位置,如果它们是用点图绘制的话。 子图的第三个角色直接涉及某些布局引擎如何展开图。如果子图的名称以cluster开头,Graphviz会将该子图视为一个特殊的集群子图。当得到支持时,布局引擎将执行布局,以便属于集群的节点一起绘制,整个集群的绘图包含在一个圆角矩形内。请注意,无论好坏,集群子图都不是DOT语言的一部分,而是仅由某些布局引擎遵守的语法约定。 语义和词法说明图应指定为digraph或graph。从语义上讲,这表明是否存在从边的节点之一到另一个节点的自然方向。 从功能上讲,该区别用于定义不同的默认渲染属性。从词法上讲,digraph必须使用edge操作符->指定边,而undirected Graph必须使用--。例如,digraph中的边将默认绘制箭头指向头部节点。对于常规图,边绘制时没有箭头。 Graph也可以被描述为strict。这禁止创建多边,即在有向情况下,具有给定尾节点和头节点的同一条边最多只能出现一次。对于无向图,最多只能有一条边连接相同的两个节点。使用相同两个节点的后续边声明将识别出与新定义边不同的边,并应用边声明中提供的任何属性。例如,图 它将有一条单独的边连接节点a和b,其颜色为蓝色。 如果使用节点、边或图声明定义了默认属性,或者通过与节点或边无关的属性赋值定义了默认属性,那么之后定义的任何相应类型的对象都将继承该属性值。这会一直持续,直到默认属性被设置为新值,然后使用新值。在设置默认属性之前定义的对象的属性将带有空字符串值,一旦创建了默认属性定义。 特别要注意的是,子图在其定义时会继承其父图的属性设置。这可能很有用;例如,可以为根图分配字体,所有子图也将使用该字体。然而,对于某些属性,这种继承是不期望的。如果在根图上设置标签,那么所有子图使用该标签可能不是理想的。与其在图的顶部列出图属性并在子图中单独重置属性,不如推迟图的属性定义,直到合适的子图被定义为止。 如果一条边属于一个集群,那么它的端点也属于该集群。因此,边的放置方式可能会影响布局,因为集群有时会递归展开。 子图和集群存在一些限制。首先,图及其子图的名称共享相同的命名空间。因此,每个子图都必须有一个唯一的名称。其次,尽管节点可以属于任意数量的子图,但当将集群视为节点和边的子集时,假定集群构成严格的层次结构。 字符编码DOT语言主要使用ASCII字符集。引用的字符串,无论是常规字符串还是HTML风格字符串,都可以包含非ASCII字符。通常,这些字符串是未解释的:它们充当了纯粹传递的特殊标识符或值。然而,名称是为了显示而设计的,这就要求软件能够计算文本的大小并确定适当的字形。为此,它需要知道使用了哪种字符编码。 默认情况下,DOT假定使用UTF-8字符编码。它还接受Latin1(ISO-8859-1)字符集,前提是输入图使用charset属性来指定它。通常有用于其他字符集的图程序,例如图标,它们会进行从一个字符集到另一个字符集的解释。 避免在名称中使用非ASCII字符的另一种方法是使用HTML实体来表示特殊字符。因此,要在字符串中包含小写希腊字母beta,可以使用ASCII序列β。通常,应该使用在结果字符集中允许的实体,并且对于这些实体存在字体的字形。在名称解析期间,这些实体将被转换为底层字符。此表显示了支持的实体、它们的Unicode值、一个常规字形以及HTML实体名称。
|
Python 为 GUI(图形用户界面)开发提供了多种选择。在所有 GUI 方法中,Tkinter 是最常用的方法。使用 Python 和 Tkinter 是构建 GUI 应用程序最快、最简单的方法。本文将提供一个分步教程...
阅读 10 分钟
Python 字典是未排序的键值对集合。在本文中,我们将探讨如何使用新的键值对扩展先前创建的字典。Python 中的字典:可以将条目列表转换为 Python 中的字典...
阅读 3 分钟
机器学习中的线性回归模型用于预测属性的未来值。在此模型中,我们有特定的独立属性,也称为预测变量。模型接受这些预测变量,将直线拟合到数据,并为我们提供一个模型...
7 分钟阅读
通知支持人们记住事情。它是一小段文本,出现在桌面或移动屏幕上,用于告知用户更新或任何其他重要的信息块。此信息使用户能够专注于重要的事件...
11 分钟阅读
在本教程中,我们将编写一个 Python 程序,打印出列表元素所有可能的组合。我们将以三个不同的整数作为输入,并打印出这些数字所有可能的组合。这是一个相当简单的程序;它可能会被问到...
阅读 3 分钟
你想盖一所房子。开始建造过程的第一件事是什么?你为你的房子制定一个计划。你按照计划建造房子。计划就像房子的蓝图...
阅读 6 分钟
break 是 Python 中循环的控制语句。它用于管理循环的顺序。假设我们想结束一个循环并继续执行后面的代码;break 可以帮助我们做到这一点。当一个...
阅读 2 分钟
每当我们看到奇怪的电话号码或来自陌生号码的电话时,我们都会想到一些基本问题,包括谁在打电话,打电话的人来自哪里,电话号码的区域,电话号码是否有效,等等。
阅读 10 分钟
简介 排序是计算机科学中的一项核心操作,其应用范围从信息恢复到增强算法执行。在不同的排序算法中,快速排序因其速度和效率而脱颖而出。然而,快速排序的效率很大程度上取决于枢轴元素的选择。在本文中,我们...
阅读 4 分钟
像 Python 这样的语言有丰富的有趣概念,旨在简化程序员的工作。在本教程中,我们将学习 Python 闭包。但在那之前,让我们回顾一下嵌套函数,看看它们如何成为理解的先决条件...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India