GraphViz DOT有向图 (三)node节点丰富内容

目录

  • 节点分类
  • Record-based Nodes 记录节点
    • node record点节定义
      • node使用label属性
      • 使用"\n", "\l" and "\r"分割内容为多行
      • node节点包含数据并且定义PORT
      • 分割多行或多列
      • 嵌套用法
      • 起名规范,用struct前缀,代表节点是数据结构体
    • node节点使用html标签
      • html节点定义PORT
    • node节点使用图片
  • Polygon-based Nodes 图形节点样式表
  • User-defined Nodes 用户自定义节点

节点分类

节点的形状可以是以下任意一种:

  • Record-based Nodes 记录节点
  • Polygon-based Nodes 图形节点
  • User-defined Nodes 用户自定义节点

GraphViz支持html,node节点label内容可以是HTML标签

Record-based Nodes 记录节点

node record点节定义

无需定义, 直接使用,即可生成节点

digraph g {
    node [shape = record,height=.1];
    "node0" -> "node4";
    "node0" -> "node1";
    "node1" -> "node2";
    "node1" -> "node3";
    "node4" -> "node6";
    "node4" -> "node5";
}

也可以显式的定义节点

digraph g {
    node [shape = record,height=.1];
    node0;
    node1;
    node2;
    node3;
    node4;
    node5;
    node6;

    "node0" -> "node4";
    "node0" -> "node1";
    "node1" -> "node2";
    "node1" -> "node3";
    "node4" -> "node6";
    "node4" -> "node5";
}

GraphViz DOT有向图 (三)node节点丰富内容_第1张图片

node使用label属性

node label属性自定义node显示的内容

digraph g {
    node [shape = record,height=.1];
    node0 [label="node0 第一个开始节点"];
    node1;
    node2;
    node3;
    node4;
    node5;
    node6;

    "node0" -> "node4";
    "node0" -> "node1";
    "node1" -> "node2";
    "node1" -> "node3";
    "node4" -> "node6";
    "node4" -> "node5";
}

GraphViz DOT有向图 (三)node节点丰富内容_第2张图片

使用"\n", “\l” and "\r"分割内容为多行

  • \n换行居中对齐
  • \l 靠左对齐
  • \r 靠右对齐
digraph g {
    node [shape = record,height=.1];
    node0 [label="node0 \n第一个开始节点\l节点说明\r是这样子\l对齐的是吧\l靠对齐"];
    node1[label="第一行说明\n第二行\l"];
    node2[label="第一行说明\n第二行\r"];
    node3[label="第一行说明\n第二行\n"];
    node4[label="第一行说明\n第二行"]
    node5;
    node6;

    "node0" -> "node4";
    "node0" -> "node1";
    "node1" -> "node2";
    "node1" -> "node3";
    "node4" -> "node6";
    "node4" -> "node5";
}

GraphViz DOT有向图 (三)node节点丰富内容_第3张图片

node节点包含数据并且定义PORT

使用 | 分割节点,展示多列内容

digraph g {
    node [shape = record,height=.1];
    node0[label = "G\n开始节点"];
    node1[label = " E| "];
    node2[label = " | B| "];
    node3[label = " F "];
    node4[label = " | R| "];
    node5[label = " | H| "];
    node6[label = " | Y| y2 |  y3 |  y4 "];

    "node0" -> "node4":f1;
    "node0" -> "node1":f1;
    "node1":f1 -> "node2":f1;
    "node1":f2 -> "node3":f1;
    "node4":f2 -> "node6":f3;
    "node4":f0 -> "node5":f1;
}

GraphViz DOT有向图 (三)node节点丰富内容_第4张图片

分割多行或多列

node shape值为 record 或者Mrecord 时, 节点就是记录节点,其内容由label定义。

  • record 正方型
  • Mrecord 圆角正方型

rankdir值不同时,分割行或者列相互转换,自已体会
GraphViz DOT有向图 (三)node节点丰富内容_第5张图片

// 用 | 分割多列
// 用  标记行的port值,箭头可指向其准确位置 
// 用{ | } 分割多行
digraph g{

    a1[shape="record" label="a|b|c|d"];
	a2[shape="Mrecord" label="a|b|c|d"];
	b1[shape="record" label="{a|b|c|d}"];
	b2[shape="Mrecord" label="{ a| b| c| d}"];
	c[shape="Mrecord" label=" c1| c2| c3| c4"]

	a1->a2;
	b1->b2:f3
	c:f2->a2;
}

嵌套用法

{} | 嵌套使用,行包含列,列包含行
GraphViz DOT有向图 (三)node节点丰富内容_第6张图片

// {} | 嵌套使用,行包含列,列包含行
digraph g{
	c[shape="Mrecord" label=" c1| c2| c3| c4"]
	d[shape="record" label="{ aa | bb}| c2"];
	e[shape="record" label="{ { aa1 | aaaa2} | bb| c2}"];
	c:f2->d:fa2;
	c:f3->e:w2;
}

起名规范,用struct前缀,代表节点是数据结构体

digraph g{
	struct_c[shape="Mrecord" label=" c1| c2| c3| c4"]
	struct_d[shape="record" label="{ aa | bb}| c2"];
	struct_e[shape="record" label="{ { aa1 | aaaa2} | bb| c2}"];
	struct_c:f2->struct_d:fa2;
	struct_c:f3->struct_e:w2;
}

node节点使用html标签

  • label<{html}> html table做为node节点内容
digraph g {
    node [shape = record,height=.1];
    node0[label=<
    
a
b
c
>]; node1[label = " E| "]; node2[label = " | B| "]; node3[label = <
hello
world
b g h
c d e
f
>]; node4[label = " | R| "]; node5[label = " | H| "]; node6[label = " | Y| y2 | y3 | y4 "]; "node0" -> "node4":f1; "node0" -> "node1":f1; "node1":f1 -> "node2":f1; "node1":f2 -> "node3"; "node4":f2 -> "node6":f3; "node4":f0 -> "node5":f1; }

GraphViz DOT有向图 (三)node节点丰富内容_第7张图片

html节点定义PORT

节点label属性的内容可以是html,通常情况是一个tabel,可以指定其属性样式等html所支持的标签。

digraph { 
    d[label=<
1122
3344
>]; c->d:f2; e->d:l3; }

GraphViz DOT有向图 (三)node节点丰富内容_第8张图片

node节点使用图片

待补充

Polygon-based Nodes 图形节点样式表

GraphViz DOT有向图 (三)node节点丰富内容_第9张图片
GraphViz DOT有向图 (三)node节点丰富内容_第10张图片
GraphViz DOT有向图 (三)node节点丰富内容_第11张图片

User-defined Nodes 用户自定义节点

使用PostScript自定义节点的形状,有兴趣的同学可以参考官方文档说和案例

你可能感兴趣的:(GraphViz)