graphviz的基本语法及使用

简介: graphviz的基本语法及使用

基本语法

字符串 都要加双引号, 可以加\n换行符

注释 双斜杠// 或/* */

有向图 digraph, 节点关系: 指向->

无向图 graph, 节点关系: 连通 --

属性 node[attribute1=value1, attribute2=value2]

大小: size=”2,2”; 单位为英寸

标签: label=”显示在图上的内容”

边:edge [color=red,style=dotted]; 这句话之后生效

节点:node [color=navy]; 这句话之后生效

边方向:rankdir=参数值;LR(从左到右),RL,BT,TB

节点形状: a[shape=box]; 默认是椭圆

边框大小:a[width=.1,height=2.5]; 单位为英寸

边框颜色:a[color=red];

构造边

image.png


image.png

详细资料:

官方文档:http://www.graphviz.org/documentation/

属性设置:https://graphviz.gitlab.io/_pages/doc/info/attrs.html

节点形状:https://graphviz.gitlab.io/_pages/doc/info/shapes.html

箭头形状:https://graphviz.gitlab.io/_pages/doc/info/arrows.html

颜色配置:https://graphviz.gitlab.io/_pages/doc/info/colors.html


基本图形绘制

digraph G {
    A -> B;
    A -> C -> B;
    A -> D -> B;
}

图片

image.png


节点形状

digraph G {
    size = "4, 4";
    main [shape=box]; /* 这是注释 */
    main -> parse [weight=8];
    parse -> execute;
    main -> init [style=dotted];
    main -> cleanup;
    execute -> { make_string; printf}
    init -> make_string;
    edge [color=red]; // 设置生效
    main -> printf [style=bold,label="100 times"];
    make_string [label="make a\n字符串"];
    node [shape=box,style=filled,color=".7 .3 1.0"];
    execute -> compare;
}

image.png


标签

digraph G {
    a -> b -> c;
    b -> d;
    a [shape=polygon,sides=5,peripheries=3,color=lightblue,style=filled];
    c [shape=polygon,sides=4,skew=.4,label="hello world"]
    d [shape=invtriangle];
    e [shape=polygon,sides=4,distortion=.7];
}

image.png


类似HTML的样式

digraph html {
    abc [shape=none, margin=0, label=<
    <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
        <TR>
            <TD ROWSPAN="3"><FONT COLOR="red">hello</FONT><BR/>world</TD>
            <TD COLSPAN="3">b</TD>
            <TD ROWSPAN="3" BGCOLOR="lightgrey">g</TD>
            <TD ROWSPAN="3">h</TD>
        </TR>
        <TR>
            <TD>c</TD>
            <TD PORT="here">d</TD>
            <TD>e</TD>
        </TR>
        <TR>
            <TD COLSPAN="3">f</TD>
        </TR>
    </TABLE>>];
}

image.png


二分查找树

digraph g {
    node [shape = record,height=.1];
    node0[label = "<f0> |<f1> G|<f2> "];
    node1[label = "<f0> |<f1> E|<f2> "];
    node2[label = "<f0> |<f1> B|<f2> "];
    node3[label = "<f0> |<f1> F|<f2> "];
    node4[label = "<f0> |<f1> R|<f2> "];
    node5[label = "<f0> |<f1> H|<f2> "];
    node6[label = "<f0> |<f1> Y|<f2> "];
    node7[label = "<f0> |<f1> A|<f2> "];
    node8[label = "<f0> |<f1> C|<f2> "];
    "node0":f2 -> "node4":f1;
    "node0":f0 -> "node1":f1;
    "node1":f0 -> "node2":f1;
    "node1":f2 -> "node3":f1;
    "node2":f2 -> "node8":f1;
    "node2":f0 -> "node7":f1;
    "node4":f2 -> "node6":f1;
    "node4":f0 -> "node5":f1;
}

image.png


示例


//定义节点属性
digraph g {
    //==========定义节点关系============
    a->b;
    b->c;
    c->a;
    c->d->e->f;
    d->g;
    e->h;
    //==========定义节点属性============
    //定义a节点为长方形, 样式为填充, 填充颜色为#ABACBA
    a[shape=box,label="Server1\nWebServer",fillcolor="#ABACBA",style=filled];
    //定义b为5边形, 标签为"bb", 样式为填充, 填充色为red
    b[shape=polygon,sides=5,label="bb",style=filled,fillcolor=red];
    //c, 默认为椭圆
    d[shape=circle]; //园
    e[shape=triangle]; //三角形
    f[shape=polygon, sides=4, skew=0.5]; //平行四边形
    g[shape=polygon, distortion=0.5]; //梯形, 上边长
    h[shape=polygon, distortion=-.5]; //梯形, 下边长
}

image.png


有向图


digraph g {
  //edge[style=dashed]; //定义边的样式, 虚线
  node[peripheries=2, style=filled, color="#eecc80"];
  a->b [color=red, style=dashed]; //定义边的颜色, 红色 (b和方括号之间必须有空格)
  b->c; //箭头, 三角形; 箭尾, 菱形
  b->d [arrowhead=box]; //箭头, 长方形
  b->e [dir=none]; //没有箭头
  d->f [dir=both]; //双向箭头
  f->h [label=go]; //定义edge的标签
  f->k [arrowhead=diamond]; //更改箭头形状
  k->y [headlabel="哈哈", taillabel="洗洗"];
}

image.png

// (更多箭头形状请参考官方文档: http://www.graphviz.org/content/arrow-shapes)


无向图

graph g {
  edge[style=dashed]; //定义边的样式, 虚线
  a -- b [color=red]; //定义边的颜色, 红色 (b和方括号之间必须有空格)
}

image.png

相关文章
|
Java 中间件 API
【C/C++ 线程 】深入浅出:理解 std::thread 的局限性
【C/C++ 线程 】深入浅出:理解 std::thread 的局限性
709 2
|
3月前
|
机器学习/深度学习 存储 缓存
模型量化技术简要详解
模型量化技术通过将高精度浮点数转换为低精度整数,在保持模型性能的同时显著提升计算效率并降低内存占用。其核心在于权衡精度与效率,广泛应用于大模型部署,尤其在边缘设备和移动平台中发挥重要作用。
939 3
|
4月前
|
人工智能 自然语言处理 数据可视化
聊聊多维表格与BI|AI x Data 数据产品的发展趋势
多维表格与Quick BI深度融合,助力企业在AI与数据时代实现高效分析。多维表格作为轻量级数据管理工具,擅长快速填报与基础分析;而Quick BI则专注于多源数据整合、深度洞察与可视化展示。两者协同,既能降低使用门槛,又能提升数据分析的广度与深度,满足企业从数据采集到智能决策的全链路需求。未来,数据产品将朝着低门槛、多场景与实用性方向发展,推动商业智能迈向新高度。
284 25
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10(附带项目源码)
312 0
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】PCA 主成分分析算法过程及原理讲解
主成分分析(PCA)的原理和算法过程。
1115 0
|
存储 JSON 数据可视化
Qt(C++)使用QChart动态显示3个设备的温度变化曲线
Qt的QChart是一个用于绘制图表和可视化数据的类。提供了一个灵活的、可扩展的、跨平台的图表绘制解决方案,可以用于各种应用程序,如数据分析、科学计算、金融交易等。
812 1
|
Java
SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
185 0
|
供应链 安全 区块链
构建未来:智能合约在区块链技术中的应用与挑战
【5月更文挑战第29天】 随着区块链技术的不断演进,智能合约作为其核心创新之一,正逐渐改变着我们的商业逻辑和交易模式。本文深入探讨了智能合约的技术原理、实际应用案例以及面临的主要挑战。我们将从智能合约的定义出发,解析其如何通过自动执行合同条款来减少中间环节,提高交易效率。同时,文章还将审视智能合约在不同行业中的实际应用,包括金融服务、供应链管理和身份验证等。最后,本文将讨论智能合约目前存在的技术限制、安全性问题以及法律监管的挑战,并提出对未来智能合约发展的展望。
711 0
|
编解码 JavaScript 前端开发
python如何解决js逆向混淆?
python如何解决js逆向混淆?
500 0