• python graphviz的使用(画图工具)


    参考文章1

    参考文章2

    一、graphviz安装及配置

    graphviz实际上是一个绘图工具,可以根据dot脚本画出树形图等。

    1、windows安装

    1. 安装graphviz软件:https://graphviz.gitlab.io/_pages/Download/Download_windows.html
    2. 配置环境变量:把bin文件夹的路径加入到环境变量path里
    3. 安装python的graphviz模块:pip install graphviz

    2、linux centos7安装

    1. yum下载graphviz软件:yum -y install graphviz
    2. 安装python的graphviz模块:pip install graphviz
    3. 测试:which dot

    二、graphviz的使用

    graphviz 有两种图,一种是无向图 graph ,边用 -- 连接,一种是有向图 digraph ,边用 -> 连接

    1、初步认识

    from graphviz import Digraph
    
    # 实例化一个Digraph对象(有向图),name:生成的图片的图片名,format:生成的图片格式
    dot = Digraph(name="MyPicture", comment="the test", format="png")
    
    # 生成图片节点,name:这个节点对象的名称,label:节点名,color:画节点的线的颜色
    dot.node(name='a', label='Ming', color='green')
    dot.node(name='b', label='Hong', color='yellow')
    dot.node(name='c', label='Dong')
    
    # 在节点之间画线,label:线上显示的文本,color:线的颜色
    dot.edge('a', 'b', label="ab
    a-b", color='red')
    # 一次性画多条线,c到b的线,a到c的线
    dot.edges(['cb', 'ac'])
    
    # 打印生成的源代码
    print(dot.source)
    
    # 画图,filename:图片的名称,若无filename,则使用Digraph对象的name,默认会有gv后缀
    # directory:图片保存的路径,默认是在当前路径下保存
    dot.view(filename="mypicture", directory="D:MyTest")
    
    # 跟view一样的用法(render跟view选择一个即可),一般用render生成图片,不使用view=True,view=True用在调试的时候
    dot.render(filename='MyPicture', directory="D:MyTest",view=True)

    使用node()和edge()或edges()方法将节点和边添加到图形对象:

    • Digraph():实例化一个图形对象
    • node():方法第一个参数是name,第二个参数是label,即node画节点
    • edges():方法可以一次添加多个边, 每个边用字符串表示, 比如 cb 表示从 c 到 b 的边,即edges画边
    • edge():方法一次添加一个边
    • view():把图形画出来,并自动显示图片(弹出来),一般使用view()进行调试
    • render():把图形画出来,一般使用render保存图片的时候,view=False(不弹出图片)

    调试推荐使用 view()

    保存图片推荐使用 render(view=False)

    2、字体乱码

    中文的label默认是无法正确显示在图中的, 因为默认的字体并不支持中文, 需要我们为node设置字体。

    # 有些字体是需要下载的,默认使用Microsoft YaHei就好
    
    0、字体样式微软雅黑:Microsoft YaHei
    
    1、字体样式华文黑体:STHeiti
    
    2、字体样式华文楷体:STKaiti
    
    3、字体样式华文宋体:STSong
    
    4、字体样式华文仿宋:STFangsong
    
    5、字体样式黑体:SimHei
    
    6、字体样式宋体:SimSun
    
    7、字体样式新宋体:NSimSun
    
    8、字体样式仿宋:FangSong
    
    9、字体样式楷体:KaiTi
    
    10、字体样式仿宋_GB2312:FangSong_GB2312
    
    11、字体样式楷体_GB2312:KaiTi_GB2312
    
    12、字体样式微软正黑体:Microsoft JhengHei
    
    13、字体样式微软雅黑体:Microsoft YaHei
    
    14、字体样式隶书:LiSu
    
    15、字体样式幼圆:YouYuan
    
    16、字体样式华文细黑:STXihei
    
    17、字体样式华文楷体:STKaiti
    
    18、字体样式华文宋体:STSong
    
    19、字体样式华文中宋:STZhongsong
    
    20、字体样式华文仿宋:STFangsong
    
    21、字体样式方正舒体:FZShuTi
    
    22、字体样式方正姚体:FZYaoti
    
    23、字体样式华文彩云:STCaiyun
    
    24、字体样式华文琥珀:STHupo
    
    25、字体样式华文隶书:STLiti
    
    26、字体样式华文行楷:STXingkai
    
    27、字体样式华文新魏:STXinwei
    字体样式
    from graphviz import Digraph
    
    dot = Digraph(name="MyPicture", format="png")
    dot.node(name="A", label="老师", fontname="Microsoft YaHei")
    dot.node('B', '学生', fontname="Microsoft YaHei")
    dot.edge("A", "B", label="教学", fontname="Microsoft YaHei")
    dot.render(filename="MyPicture")

    3、无向图

    用法跟有向图一样

    from graphviz import Graph
    
    # 无向图
    dot = Graph(name="MyPicture", format="png")
    
    dot.node("People")
    dot.node("Home")
    dot.edge("People", "Home")
    dot.view(filename="MyPicture")

    三、属性(样式)说明

    node节点属性如下 

    NameDefaultValues
    color black node shape color
    comment   any string (format-dependent)
    distortion 0.0 node distortion for shape=polygon
    fillcolor lightgrey/black node fill color
    fixedsize false label text has no affect on node size
    fontcolor black type face color
    fontname Times-Roman font family
    fontsize 14 point size of label
    group   name of node’s group
    height .5 height in inches
    label node name any string
    layer overlay range all, id or id:id
    orientation 0.0 node rotation angle
    peripheries shape-dependent number of node boundaries
    regular false force polygon to be regular
    shape ellipse node shape; see Section 2.1 and Appendix E
    shapefile   external EPSF or SVG custom shape file
    sides 4 number of sides for shape=polygon
    skew 0.0 skewing of node for shape=polygon
    style   graphics options, e.g. bold, dotted, filled; cf. Section 2.3
    URL   URL associated with node (format-dependent)
    width .75 width in inches
    z 0.0 z coordinate for VRML output

    edge边框属性

    NameDefaultValues
    arrowhead normal style of arrowhead at head end
    arrowsize 1.0 scaling factor for arrowheads
    arrowtail normal style of arrowhead at tail end
    color black edge stroke color
    comment   any string (format-dependent)
    constraint true use edge to affect node ranking
    decorate   if set, draws a line connecting labels with their edges
    dir forward forward, back, both, or none
    fontcolor black type face color
    fontname Times-Roman font family
    fontsize 14 point size of label
    headlabel   label placed near head of edge
    headport   n,ne,e,se,s,sw,w,nw
    headURL   URL attached to head label if output format is ismap
    label   edge label
    labelangle -25.0 angle in degrees which head or tail label is rotated off edge
    labeldistance 1.0 scaling factor for distance of head or tail label from node
    labelfloat false lessen constraints on edge label placement
    labelfontcolor black type face color for head and tail labels
    labelfontname Times-Roman font family for head and tail labels
    labelfontsize 14 point size for head and tail labels
    layer overlay range all, id or id:id
    lhead   name of cluster to use as head of edge
    ltail   name of cluster to use as tail of edge
    minlen 1 minimum rank distance between head and tail
    samehead   tag for head node; edge heads with the same tag are
    sametail   merged onto the same port
    style   tag for tail node; edge tails with the same tag are merged onto the same port
    taillabel   graphics options, e.g. bold, dotted, filled; cf. Section 2.3
    tailport   label placed near tail of edge n,ne,e,se,s,sw,w,nw
    tailURL   URL attached to tail label if output format is ismap
    weight 1 integer cost of stretching an edge

    Digraph图属性如下

    NameDefaultValues
    bgcolor   background color for drawing, plus initial fill color
    center false center drawing on page
    clusterrank local may be global or none
    color black for clusters, outline color, and fill color if fillcolor not defined
    comment   any string (format-dependent)
    compound false allow edges between clusters
    concentrate false enables edge concentrators
    fillcolor black cluster fill color
    fontcolor black type face color
    fontname Times-Roman font family
    fontpath   list of directories to search for fonts
    fontsize 14 point size of label
    label   any string
    labeljust centered ”l” and ”r” for left- and right-justified cluster labels, respectively
    labelloc top ”t” and ”b” for top- and bottom-justified cluster labels, respectively
    layers   id:id:id…
    margin .5 margin included in page, inches
    mclimit 1.0 scale factor for mincross iterations
    nodesep .25 separation between nodes, in inches.
    nslimit   if set to f, bounds network simplex iterations by (f)(number of nodes) when setting x-coordinates
    nslimit1   if set to f, bounds network simplex iterations by (f)(number of nodes) when ranking nodes
    ordering   if out out edge order is preserved
    orientation portrait if rotate is not used and the value is landscape, use landscape orientation
    page   unit of pagination, e.g. “8.5,11”
    pagedir BL traversal order of pages
    quantum   if quantum ¿ 0.0, node label dimensions will be rounded to integral multiples of quantum
    rank   same, min, max, source or sink
    rankdir TB LR (left to right) or TB (top to bottom)
    ranksep .75 separation between ranks, in inches.
    ratio   approximate aspect ratio desired, fill or auto
    remincross   if true and there are multiple clusters, re-run crossing minimization
    rotate   If 90, set orientation to landscape
    samplepoints 8 number of points used to represent ellipses and circles on output (cf. Appendix C
    searchsize 30 maximum edges with negative cut values to check when looking for a minimum one during network simplex
    size   maximum drawing size, in inches
    style   graphics options, e.g. filled for clusters
    URL   URL associated with graph (format-dependent)

    例子

    """使用graph_attr, node_attr, edge_attr参数, 你可以更改图中节点和边的显示样式"""
    
    from graphviz import Digraph
    
    # 可以在实例化对象的时候设置样式
    dot = Digraph(name="MyPicture", node_attr={"shape": "plaintext"}, format="png")
    
    # 也可以实例化之后, 设置这些样式
    dot.graph_attr['rankdir'] = 'LR'
    dot.edge_attr.update(arrowhead='vee', arrowsize='2')
    
    # 然后开始画图
    dot.node("Dog")
    dot.node("Cat")
    dot.edge("Dog", "Cat")
    
    dot.view(filename="MyPicture")

    四、官网

    官方文档

    官网

  • 相关阅读:
    Open 5分钟:恺英收集闵懿
    Open 5分钟:摩卡全国宋啸飞
    互联网十大病毒集体名单曝光
    浩大游戏CEO谭群钊:2011将进一步加大海内拓展
    CustomSongSender.com:定制歌曲作为礼物
    米聊:跨运营商收费即时通讯
    说说Google Cloud Connect
    松下将于3月19日出售无需触碰的感触式便携电视
    Groupon中国网站贵客上线 获腾讯云锋基金投资
    诺基亚西门子并购摩托罗案前景堪忧
  • 原文地址:https://www.cnblogs.com/Zzbj/p/11431015.html
Copyright © 2020-2023  润新知