# ใช้งาน Graphviz online

## Graphviz online

GraphvizOnline lets you edit and view GraphViz diagrams online. You can use GraphvizOnline online here.

Resources

## DOT Language – digraph examples

Node

```digraph DG {
A
}```
```digraph DG {
A
B
}```

Edge

```digraph DG {
A -> B
}```
```digraph DG {
A -> B
A -> C
}```

or

```digraph DG {
A -> {B, C}
}```
```digraph DG {
A -> B
A -> C
B -> C
}```
```digraph DG {
A -> {B, C, D}
{B, C} -> {F}
}```
```digraph DG {
A -> {B, C, D}
{B, C, D} -> {F}
}```

or

```digraph DG {
A -> {B, C, D} -> {F}
}```

Shape

```digraph DG {

A [shape=diamond]
B [shape=box]
C [shape=circle]

A -> B
A -> C
A -> D

}```

Color

```digraph DG {

A [shape=diamond, color=green]
B [shape=box]
C [color=red]

A -> B
A -> C [color=blue]
A -> D [color="brown:invis:brown"]

}```

```digraph D {

A [shape=diamond]
B [shape=box]
C [shape=circle]

A -> B [style=dashed, color=grey]
A -> C [color="black:invis:black"]

}```

Aligned text

```digraph DG {

node [shape=record fontname=Arial];

a  [label="one\ltwo three\lfour five six seven\l"]
b  [label="one\ntwo three\nfour five six seven"]
c  [label="one\rtwo three\rfour five six seven\r"]

a -> b -> c

}```

Graph title (label)

```digraph DG {

label = "The foo, the bar and the baz";
labelloc = "t"; // place the label at the top (b seems to be default)

node [shape=plaintext]

FOO -> {BAR, BAZ};

}```

HTML label

```digraph DG {
label = <The <font color='red'><b>foo</b></font>, the <font point-size='20'>bar</font>  and<br/> the <i>baz</i>>;
labelloc = "t"; // place the label at the top (b seems to be default)

node [shape=plaintext]

FOO -> {BAR, BAZ};
}```

Subgraph

```digraph DG {
A -> {B, C, D} -> {F}

subgraph cluster_R {
rank=same B C D
}
}```

# Python 3.8 วาดกราฟด้วย Graphviz

ติดตั้ง graphviz บน Ubuntu

`sudo apt install graphviz`

ติดตั้ง graphviz บน Windows เปิด cmd ด้วยสิทธิ administrator

`choco install graphviz`

## dependency-graph

ติดตั้งไพธอนไลบรารี graphviz-0.19

`python3.8 -m pip install graphviz`

ที่บรรทัดแรกของไฟล์ dependency_graph.py เพิ่ม

`#!/usr/bin/python3.8`

ทำให้ไฟล์ dependency_graph.py รันได้

`chmod 755 dependency_graph.py`

หาตัวอย่าง source code ภาษา c (GitHub – pvigier/ecs: A simple and easy to use entity-component-system C++ library) มาไว้ใน folder `src` แล้วทดลองรัน

`./dependency_graph.py src/ out -f png`

จะได้ไฟล์ภาพ `out.png`

```usage: dependency_graph.py [-h] [-f {bmp,gif,jpg,png,pdf,svg}] [-v] [-c]
folder output

positional arguments:
folder                Path to the folder to scan
output                Path of the output file without the extension

optional arguments:
-h, --help            show this help message and exit
-f {bmp,gif,jpg,png,pdf,svg}, --format {bmp,gif,jpg,png,pdf,svg}
Format of the output
-v, --view            View the graph
-c, --cluster         Create a cluster for each subfolder```

แต่ถ้ารันแล้วได้ error

`'dot' is not recognized as an internal or external command`

แสดงว่ายังติดตั้ง graphviz ไม่สำเร็จ หรือ หา path ไม่เจอ Graphviz’s dot tool on Windows

## pydeps

ติดตั้ง pydeps

`python -m pip install pydeps`

ตัวอย่างการเรียกใช้

```pydeps pydeps
pydeps pydeps --rankdir TB
pydeps pydeps --rankdir BT```

ให้ output เป็นไฟล์ png

`pydeps -T png pydeps`

# ติดตั้ง Graphviz บน Ubuntu 18.04

ติดตั้ง Graphviz

`sudo apt install graphviz`
`sudo yum install graphviz`

ดูเวอร์ชันที่ติดตั้ง

```\$ dot -V
dot - graphviz version 2.40.1 (20161225.0304)```

ทดลองใช้งานทาง Command Line

`echo 'digraph { a -> b }' | dot -Tsvg > output.svg`
`echo 'digraph { a -> b }' | dot -Tsvg -o output.svg`

ใส่ข้อความและกำหนดสีของข้อความ (set a graph attribute `-G`name[=value])

`echo 'digraph { a -> b }' | dot -Tsvg -Gfontcolor=red -Glabel="My favorite letters" > output2.svg`

กำหนดรูปแบบของโหนด (set a default node attribute `-N`name[=value] )

`echo 'digraph { a -> b }' | dot -Tsvg -Nfontcolor=red -Nshape=rect > output3.svg`

กำหนดรูปแบบของ edge และลูกศร (set a default edge attribute `-E`name[=value])

บันทึกไฟล์ output เป็น png หรือฟอร์แมตอื่นๆดู supported formats

`echo 'digraph { a -> b }' | dot -Tpng -Ecolor=red -Earrowhead=diamond > output4.png`