数据结构可视化 Graphviz在Python中的使用 [树的可视化]

简介: 数据结构可视化 Graphviz在Python中的使用 [树的可视化]

1. Graphviz 相关介绍

1.1 安装

安装直接在shell里面pip就好了,代码如下:

pip install graphviz

一个例子:

from graphviz import Digraph, Graph
g = Graph(engine='dot',
         node_attr={'shape': 'egg'},
         )
g.edge('hello1', 'hello2', label='l')
g.edge('hello1', 'hello3', label='r')
g.edge('hello2', 'hello4', label='l')
g.edge('hello2', 'hello5', label='r')
g.view()

1.2 有向图和无向图

有向图:graphviz.Digraph() edge 有向图

无向图:graphviz.Graph() edge 无向图

Digraph和Graph参数都是一样的,其中:

name: graphviz源码的文件名 即name.gv

comment: graphviz源码的comment,在源码的第一行

filename: graphviz源码的文件名 即filename

directory: 保存graphviz源码的文件夹

format: 文件格式 bmp, canon, cgimage, cmap, cmapx, cmapx_np, dot, dot_json, eps, exr, fig, gd, gd2, gif, gtk, gv, ico, imap, imap_np, ismap, jp2, jpe, jpeg, jpg, json, json0, pct, pdf, pic, pict, plain, plain-ext, png, pov, ps, ps2, psd, sgi, svg, svgz, tga, tif, tiff, tk, vml, vmlz, vrml, wbmp, webp, x11, xdot, xdot1.2, xdot1.4, xdot_json, xlib

engine: 布局 circo, dot, fdp, neato, osage, patchwork, sfdp, twopi

encoding: 源码保存的编码

graph_attr: 图属性

node_attr: 点属性

edge_attr: 边属性

1.3 node 属性

node_attr = {‘shape’: ‘box’}

node_attr = {‘fontname’: ‘SimHei’}

  • 黑体:SimHei
  • 宋体:SimSun
  • 新宋体:NSimSun
  • 仿宋:FangSong
  • 楷体:KaiTi

1.4 edge 属性

edge_attr = {‘arrowhead’: ‘rnormal’}

待更新

2. 数据结构可视化

2.1 画树

利用Graphviz画树,代码如下:

from graphviz import Digraph
class Node:
    def __init__(self, number, val=None, name=None, left=None, right=None):
        """number 必须要保证每个结点都是独一无二的,其他属性都可以 可存在可不存在"""
        self.number = number
        self.val = val
        self.name = name
        self.left = left
        self.right = right
def plot_tree(root):
    g = Digraph(
      format='png',
        engine='dot',
        node_attr={
            'shape': 'egg',
            'fontname': 'SimHei'
        },
        edge_attr={'arrowhead': 'normal'},
    )
    def dfs(g, node, parent=None, where=None):
        if not node:
            return
        if node and parent:
          # 如果 有name就以name为标签,没有name就以{number:val}表示标签
            name1 = parent.name if parent.name else str(parent.number) + f':{parent.val}'
            name2 = node.name if node.name else str(node.number) + f':{node.val}'
            # label 表示是否标记左or右
            g.edge(name1, name2, label=where)
        dfs(g, node.left, node, where='l')
        dfs(g, node.right, node, where='r')
    
    dfs(g, root)
    g.view()

使用方法如下:

plot_tree(root)


目录
相关文章
|
1月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
46 10
|
1月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
61 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
1月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
48 12
|
1月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
51 2
|
2月前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
132 66
|
2月前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
70 20
|
2月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
565 7
|
3月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
3月前
|
存储 开发者 索引
Python 中常见的数据结构
这些数据结构各有特点和适用场景,在不同的编程任务中发挥着重要作用。开发者需要根据具体需求选择合适的数据结构,以提高程序的效率和性能
151 59
|
3月前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
111 33

推荐镜像

更多