zoukankan      html  css  js  c++  java
  • Graphviz 使用笔记

      官网:Graphviz

      最近一直在找如何用写代码的方式就可以实现数据结构可视化、流程图等等,于是发现了她,上手也比较简单,但正当我仅觉得不错的时候,我发现竟然还可以用python来写,瞬间好感度爆满啊!太激动了~

      下面就先简单说一说Windows下如何使用吧:

      首先不管是直接写digraph,还是用python,都必须要安装并配置好Graphviz,配置实际上都是常用的做法了,把dot.exe等文件路径添加到系统环境变量中的PATH即可。然后就可以用notepad等编辑器编写代码,保存时保存为 .gv 或 .dot 后缀,再用dot命令编译为pdf、png、jpg、jpeg等等即可。例如,编写内容如下:

    digraph tree {
    	node [shape=circle]
    	67
    	53
    	79
    	46
    	57
    	70
    	88
    	43
    	55
    	60
    	74
    	56
    	67 -> 53
    	67 -> 79
    	53 -> 46
    	53 -> 57
    	79 -> 70
    	79 -> 88
    	46 -> 43
    	57 -> 55
    	57 -> 60
    	55 -> 56
    	70 -> 74
    }
    

      然后键入dot命令:

      如果没有报错,则可以打开tree.png了:

      使用python编写graphviz还需要使用pip来安装一个包:

    $ pip install graphviz
    

      然后就参考这篇文档来学习吧。

      一个例子:

    from graphviz import Digraph, Graph
    
    dot = Digraph(name='tree', node_attr={'shape': 'circle'})
    
    dot.node('67')
    dot.node('53')
    dot.node('79')
    dot.node('46')
    dot.node('57')
    dot.node('70')
    dot.node('88')
    dot.node('43')
    dot.node('55')
    dot.node('60')
    dot.node('74')
    dot.node('56')
    
    dot.edge('67', '53')
    dot.edge('67', '79')
    dot.edge('53', '46')
    dot.edge('53', '57')
    dot.edge('79', '70')
    dot.edge('79', '88')
    dot.edge('46', '43')
    dot.edge('57', '55')
    dot.edge('57', '60')
    dot.edge('55', '56')
    dot.edge('70', '74')
    print(dot.source)
    dot.render('avl-tree.gv', view=True)
    

      这里我不知道为啥我配置好了路径,却运行最后还是会报找不到相应文件路径的错,但还是能生成'avl-tree.gv'文件,然后就只有手动在命令行编译文件了。

      截图:

      还是输出了.gv文件:

      再来个例子:

    from graphviz import Digraph
    
    dot = Digraph(name='tree', filename='tree.gv', node_attr={'shape': 'circle'})
    dot.node_attr.update(color='lightblue2', style='filled')
    
    dot.edge('67', '53')
    dot.edge('67', '79')
    dot.edge('53', '46')
    dot.edge('53', '57')
    dot.edge('79', '70')
    dot.edge('79', '88')
    dot.edge('46', '43')
    dot.edge('57', '55')
    dot.edge('57', '60')
    dot.edge('55', '56')
    dot.edge('70', '74')
    
    print(dot.source)
    

      tree.png:

       还可以再简单一些:

    dot.edges([('67', '53'),
               ('67', '79'),
               ('53', '46'),
               ('53', '57'),
               ('79', '70'),
               ('79', '88'),
               ('46', '43'),
               ('57', '55'),
               ('57', '60'),
               ('55', '56'),
               ('70', '74')
               ])
    

      

  • 相关阅读:
    记录一个bug关于radio的
    at notFoundError …@cross-spawnlibenoent.js: 报错解决
    关于目前高清屏幕150%适配需要注意的样式写法
    记录一个css样式覆盖的问题。
    video.js使用详解(转载)
    记录一次node版本更新的问题,node的exe版本安装不上去。
    webstorm左侧导航栏背景变成黄色的,文件搜索,定位等一系列功能都不好用了?
    SCRIPT5007: 无法获取未定义或 null 引用的属性“xxx”
    VMWare中安装CentOS6.6不能上网的解决办法
    Unity出现 error building player exception android (invocation failed)
  • 原文地址:https://www.cnblogs.com/darkchii/p/8995297.html
Copyright © 2011-2022 走看看