---
title: "Graphviz 筆記"
path: "Graphviz 筆記"
---
{%hackmd @RintarouTW/About %}
# Graphviz 筆記
## DOT Language
- context based
- keywords: $node, edge, graph, digraph, subgraph$
- comment: /* */ and //
```
graph/digraph/cluster/subgraph {
rankdir=LR
rank="same"
node
edge
}
```
### Subgraphs and Clusters
A -> {B C} $\iff$ A->B A->C
**strict** forbids muti-edges.
<center>
```graphviz
strict graph {
graph [bgcolor=transparent;fontcolor="#888888";color="#888888"];
node [fontcolor="#888888";color="#888888"];
edge [fontcolor="#888888";color="#888800"];
a -- b
a -- b
b -- a
}
```
</center>
If the name of the subgraph begins with **cluster**, Graphviz notes the subgraph as a special cluster subgraph with the bounding box.
## Styling
Use the $graph\_attr, node\_attr, and edge\_attr$ arguments to change the default appearance of your graph, nodes, and edges.
```
node {
shape=plaintext|box|star|egg|rarrow
style=filled
color=COLOR_NAME
label="text"
}
edge {
arrowhead=vee|
arrowsize=2
style=filled
color=COLOR_NAME
label="text"
}
```
### Node Shape, Edge, Label, Color
<center>
```graphviz
digraph "pet-shop" {
graph [bgcolor=transparent;fontcolor="#888888";color="#888888"];
node [fontcolor="#888888";color="#888888"];
edge [fontcolor="#888888";color="#888800"];
graph [rankdir=LR]
node [shape=plaintext]
edge [arrowhead=vee arrowsize=2]
parrot
dead
parrot -> dead
}
```
</center>
```
digraph "pet-shop" {
graph [rankdir=LR]
node [shape=plaintext]
edge [arrowhead=vee arrowsize=2]
parrot
dead
parrot -> dead
}
```
<center>
```graphviz
graph ni {
graph [bgcolor=transparent;fontcolor="#888888";color="#888888"];
node [fontcolor="#888888";color="#888888"];
edge [fontcolor="#888888";color="#888800"];
node [shape=rarrow]
1 [label="Ni!"]
2 [label="Ni!"]
3 [label="Ni!" shape=egg]
node [shape=star]
4 [label="Ni!"]
5 [label="Ni!"]
rankdir=LR
1 -- 2
2 -- 3
3 -- 4
4 -- 5
}
```
</center>
```
graph ni {
node [shape=rarrow]
1 [label="Ni!"]
2 [label="Ni!"]
3 [label="Ni!" shape=egg]
node [shape=star]
4 [label="Ni!"]
5 [label="Ni!"]
rankdir=LR
1 -- 2
2 -- 3
3 -- 4
4 -- 5
}
```
<center>
```graphviz
digraph nodestyling {
graph [bgcolor=transparent;fontcolor="#888888";color="#888888"];
node [fontcolor="#888888";color="#888888"];
edge [fontcolor="#888888";color="#888800"];
node [color=lightblue2 style=filled]
rankdir=LR
1 -> 2
node [shape=egg]
2 -> 3
}
```
</center>
```
digraph nodestyling {
node [color=lightblue2 style=filled]
rankdir=LR
1 -> 2
node [shape=egg]
2 -> 3
}
```
### Backslash & Multiline
The Graphviz layout engine supports a number of escape sequences such as \n, \l, \r (for multi-line labels: centered, left-justified, right-justified) and \N, \G, \L (expanded to the current node name, graph name, object label).
<center>
```graphviz
digraph {
graph [bgcolor=transparent;fontcolor="#888888";color="#888888"];
node [fontcolor="#888888";color="#888888"];
edge [fontcolor="#888888";color="#888800"];
backslash [label="\\"]
multi_line [label="centered\nleft\lright\r"]
}
```
</center>
```
digraph {
backslash [label="\\"]
multi_line [label="centered\nleft\lright\r"]
}
```
<center>
```graphviz
digraph {
graph [bgcolor=transparent;fontcolor="#888888";color="#888888"];
node [fontcolor="#888888";color="#888888"];
edge [fontcolor="#888888";color="#888800"];
spam -> "eggs eggs"
"node" -> "\"here's a quote\""
}
```
</center>
```
digraph {
spam -> "eggs eggs"
"node" -> "\"here's a quote\""
}
```
<center>
```graphviz
graph parent {
graph [bgcolor=transparent;fontcolor="#888888";color="#888888"];
node [fontcolor="#888888";color="#888888"];
edge [fontcolor="#888888";color="#888800"];
spam -- eggs
subgraph child {
node [shape=box]
foo -- bar
}
}
```
</center>
```
graph parent {
spam -- eggs
subgraph child {
node [shape=box]
foo -- bar
}
}
```
<center>
```graphviz
digraph {
graph [bgcolor=transparent;fontcolor="#888888";color="#888888"];
node [fontcolor="#888888";color="#888888"];
edge [fontcolor="#888888";color="#888800"];
"King Arthur" -> {
"Sir Bedevere", "Sir Lancelot"
}
"Sir Bedevere" -> "Sir Lancelot" [constraint=false]
}
```
</center>
```
digraph {
"King Arthur" -> {
"Sir Bedevere", "Sir Lancelot"
}
"Sir Bedevere" -> "Sir Lancelot" [constraint=false]
}
```
## Node Shape Types
https://www.graphviz.org/doc/info/shapes.html
## Arrow Types
https://www.graphviz.org/doc/info/attrs.html#k:arrowType
## Node, Graph, Edge Attributes
https://www.graphviz.org/doc/info/attrs.html
###### tags: `graphviz` `dot`