Graphviz | Dot画图脚本语言学习

本文介绍了Graphviz的下载安装、在线工具和VSCode预览配置,详细解析了Dot语言,包括其历史、用途和基本语法。通过实例展示了节点(node)、边(edge)和子图(subgraph)的创建,以及各种属性和预定义属性的使用,提供了多个绘制图表的案例,帮助读者快速掌握Graphviz的绘图技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1-使用 Graphviz

1-1-下载,安装客户端Graphviz

1-1-2-Graphviz windows客户端

可用版本下载地址 | graphviz-2.38 :URL

下载速度可能会和慢

1-1-3-安装,配置教程

参考 | windows下Graphviz安装及入门教程的实现方法 : URL

1-2-在线网站

网站1| Uhttp://www.webgraphviz.com
网站2推荐 | http://dreampuf.github.io

1-3-使用 VSCode 进行预览生成

在官网下载graphviz安装包

安装 vscode 插件 Graphviz Preview

settings.json中添加 “graphvizPreview.dotPath”: "graphviz_path\graphviz-2.38\\release\\bin\\dot.exe", graphviz_path` 为所在路径,这些修改一下既可

新建一个 dot 文件,右上角就会有预览生成的按钮了

2-概述Dot和Graphviz

2-3-1-Q-Graphviz是什么?

	1---一个程序(软件)
	2---功能 : 作图【各种图】,自动排版
	3---可生成png,pdf……格式

2-3-2-Q-Graph的组成?

	1---graph(图)
	2---node(节点)
	3---edge(边)
	4---attribute(属性)

2-3-4-Q-Graphviz如何使用?

	1---使用专门的语言编写,dot……

2-4-1-Q-DOT是什么?

Dot language

	1---一种计算机语言,dot语言
	2---可以画图

2-4-2-Q-dot的历史?

2-4-3-Q-dot有什么用?

	1---画图

2-4-4-Q-dot怎么用?

定义dot的抽象语法,抽象语法,抽象语法
定于约束规则如下

1.graph  //声明图
	[strict] (graph | digraph) ['ID'] '{ stmt_list}'
2.stmt_list
	[strict [';']  stmt_list]
3.stmt  
	node_stmt |edge_stmt | attr_stmt | ID = 'ID' | subgraph
4.attr_stmt  //属性语句使用
	(graph | node | edge ) attr_list
5.attr_list  //属性列表使用
	'[' [a_list] ']' [attr_list]
6.a_list  
	ID '=' ID [ ( ';' | ';' ) ] [a_list]
7.edge_stmt  //边语句使用
	(node_id |subgraph) edgeRHS [attr_list]
8.edgeRHS
	edgeop (node_id |subgraph |edegRHS)
9.node_stmt
	node_id 
10.node_id 
	ID [port]
11.port
	'I' ID ['I' compass_pt] 'stmt_list'
12.subgraph
	[subgraph [10]] '{stmt_list'}'
13.compass-pt
	(n | ne | e | se | s | sw | w |nw | -)

2-4-5-dot语法关键字

strict    |  严格图限定,禁止创建多个相同的边
graph     |  无向图,在创建图之前必须声明是有向图还是无向图
digraph   |  有向图(常用)
node      |  节点
edge      |  边
subgraph  |  子图

说明

1.(graph)
	---整个图graph,必须使用graph,或digraph {
   } ,限定说明图
	---图中声明列表可为空,也可为多个,声明后,;为可选项
2.属性(attribute)
	---形如 [shape="",style="",weight="",……]的称为属性列表
	---属性必须使用[ ]括起来
	---属性列表项为 key=value的形式存在,列表项可以以 ","";"结尾
3.(edge)
	
4.节点(node)
	---节点标识符 [label="节点描述文字" ,height=.5]
	---如
		node0 [label = "<postid1 > string | <postid2> string | <postid3> string3"]
		node:head[color="lightblue"]  //设置该节点node0部分的颜色

3-教程

3-1-快速入门

简单例子-无向图

graph graphname {
    
    a -- b; 
    b -- c;
    b -- d;
    d -- a;
}

效果
在这里插入图片描述

一样的图,不一样的布局

graph graphname {
   
    rankdir=LR;  //Rank Direction Left to Right
    a -- b; 
    b -- c;
    b -- d;
    d -- a;
}

效果
在这里插入图片描述

简单例子-有向图

digraph graphname{
   
    a -> b;
    b -> c;
    a -> c;
}

在这里插入图片描述

带标签的有向图

digraph graphname{
   

    T [label="Teacher"]      // node T
    P [label="Pupil"]  // node P

    T->P [label="Instructions", fontcolor=darkgreen] // edge T->P
}

在这里插入图片描述
同样的图,不同颜色,样式

digraph graphname {
   
    T [label="Teacher" color=Blue, fontcolor=Red, fontsize=24, shape=box]      // node T
    P [label="Pupil" color=Blue, fontcolor=Red, fontsize=24, shape=box]  // node P

    T->P [label="Instructions", fontcolor=darkgreen] // edge T->P
}

在这里插入图片描述
可选择的node节点的形状

digraph graphname {
   
    rankdir="BT"

box [shape="box"];
polygon [shape="polygon"];
ellipse [shape="ellipse"];
oval [shape="oval"];
circle [shape="circle"]; 
point [shape="point"];
egg  [shape="egg"
### 使用Graphviz绘制图形 #### 安装Graphviz库 为了使用Graphviz进行绘图,首先需要安装`graphviz`以及对应的Python接口`pydotplus`或`graphviz`。可以通过pip命令轻松完成这一操作。 ```bash pip install graphviz pydotplus ``` #### 创建简单的有向图 下面是一个创建简单有向图的例子: ```python from graphviz import Digraph # 初始化Digraph对象 dot = Digraph(comment='The Round Table') # 添加节点 dot.node('A', 'King Arthur') dot.node('B', 'Sir Bedevere the Wise') dot.node('L', 'Sir Lancelot the Brave') # 添加边 dot.edges(['AB', 'AL']) dot.edge('B', 'L', 'secretly admires') # 输出到文件 dot.render('round-table.gv', view=True) print(dot.source) # 打印源码 ``` 这段代码会生成一个名为`round-table.gv.pdf`的PDF文档[^1]。 #### 利用Dot脚本定义更复杂的图表 对于更加复杂的情况,可以直接编写DOT语言脚本来构建所需的图形结构。这里给出一段示例代码展示如何通过字符串形式指定更多的样式选项: ```python import pydotplus as pdp # 构建多层嵌套子图 src = ''' digraph G { subgraph cluster_0 { style=filled; color=lightgrey; node [style=filled,color=white]; "Node A" -> {"Node B"; "Node C"}; label = "Process #1"; } subgraph cluster_1 { node [style=filled]; "Node D" -> "Node E" -> "Node F"; label = "Process #2"; color=blue } "Node B" -> "Node D"; } ''' graphs = pdp.graph_from_dot_data(src) graphs.write_png('example.png') # 导出为PNG图像 ``` 上述例子展示了怎样利用集群(cluster),设置颜色填充等高级特性来增强所生成图表的表现力[^4]。 #### 调整布局算法 Graphviz内置了几种不同的布局方法,默认情况下采用的是`dot`算法适合大多数场景下的有向图排列;如果想要尝试其他风格,则可以在初始化时传入参数改变默认行为: ```python dot = Digraph(engine='neato') # 更改为基于物理模拟的位置调整(neato) ``` 这允许用户根据实际需求挑选最合适的视觉呈现效果[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值