数据结构可视化 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)


目录
相关文章
|
3天前
|
数据可视化 Python
Python数据可视化-动态柱状图可视化
Python数据可视化-动态柱状图可视化
|
3天前
|
JSON 数据可视化 数据处理
Python数据可视化-折线图可视化
Python数据可视化-折线图可视化
|
4天前
|
存储 索引 Python
Python常用数据结构——集合
Python常用数据结构——集合
19 3
|
4天前
|
存储 数据安全/隐私保护 Python
Python常用数据结构——字典的应用
Python常用数据结构——字典的应用
|
6天前
|
Python
逆天改命!掌握Python并查集,数据结构难题从此不再是你的痛!
在编程旅程中,遇到棘手的数据结构难题是否让你苦恼?别担心,Python并查集(Union-Find)是你的得力助手。这是一种高效处理不相交集合合并及查询的数据结构,广泛应用于网络连通性、社交网络圈子划分等场景。通过维护每个集合的根节点,它实现了快速合并与查询。本文将介绍并查集的基本概念、应用场景以及如何在Python中轻松实现并查集,帮助你轻松应对各种数据结构挑战。
17 3
|
9天前
|
存储 大数据 索引
解锁Python隐藏技能:构建高效后缀树Suffix Tree,处理大数据游刃有余!
通过构建高效的后缀树,Python程序在处理大规模字符串数据时能够游刃有余,显著提升性能和效率。无论是学术研究还是工业应用,Suffix Tree都是不可或缺的强大工具。
24 6
|
6天前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
20 2
|
6天前
|
JSON 前端开发 JavaScript
一文了解树在前端中的应用,掌握数据结构中树的生命线
该文章详细介绍了树这一数据结构在前端开发中的应用,包括树的基本概念、遍历方法(如深度优先遍历、广度优先遍历)以及二叉树的先序、中序、后序遍历,并通过实例代码展示了如何在JavaScript中实现这些遍历算法。此外,文章还探讨了树结构在处理JSON数据时的应用场景。
一文了解树在前端中的应用,掌握数据结构中树的生命线
|
7天前
|
存储 开发者 Python
从理论到实践:Python中Trie树与Suffix Tree的完美结合,开启编程新篇章!
在编程领域,高效的数据结构对于解决问题至关重要。本文通过一个案例分析,介绍如何在Python中结合使用Trie树(前缀树)和Suffix Tree(后缀树)。案例聚焦于开发具备高效拼写检查和文本相似度检测功能的文本编辑器。首先,通过构建Trie树快速检查单词是否存在;接着,利用Suffix Tree检测文本相似度。尽管Python标准库未直接提供Suffix Tree,但可通过第三方库或自定义实现。本文展示了高级数据结构在实际应用中的强大功能,并强调了理论与实践相结合的重要性。
19 1
|
7天前
|
存储 算法 Python
逆袭之路:掌握Python字典树Trie与后缀树,成为技术圈的耀眼新星!
在编程的征途上,每个人都渴望成为那个能够独当一面、解决复杂问题的技术高手。而掌握高级数据结构,如字典树(Trie)与后缀树(Suffix Tree),无疑是你逆袭路上的重要一步。这些数据结构不仅能够提升你的编码技能,还能让你在解决特定问题时游刃有余,从而在技术圈中脱颖而出,成为那颗耀眼的新星。
17 1
下一篇
无影云桌面