เขียน Diagram ด้วยภาษา dot

อยากจะเขียน diagram ง่ายๆ ขึ้นมาสักอัน แต่ไม่มีโปรแกรมจำพวก visio, photoshop จะทำยังไงดี นึกขึ้นได้เขียน diagram ด้วยภาษา dot ดีกว่า

dot language เป็นภาษาที่ใช้ในการเขียนกราฟให้เข้าใจแบบง่ายๆ วิธีการเขียนก็จะเขียนเป็น code หลังจากนั้นโปรแกรม render code ให้ออกมาเป็นรูปภาพ, pdf, SVG

ตัวอย่างผมต้องการเขียนรูปแบบนี้

chart

จะต้องเขียน code ในลักษณะนี้

[ruby]
digraph graphname {
graph [nodesep=0.5, fontname="DejaVu Sans", rankdir=TB,splines=line;]
labeljust=right;

subgraph cluster_0{
"A"; "B"; "C";
label = "Master";
color=blue;
rankdir=LR;
{rank=same; A; B;C}
}

subgraph cluster_1{
"D"; "E"; "F";
label = "Slave";
color=red;
rankdir=LR;
{rank=same; E; F; D}
}

A->B[dir=both]
B->C[dir=both]

A->D;
B->E;
C->F;
}
[/ruby]

อธิบายได้ดังนี้

[html]
graph [nodesep=0.5, fontname="DejaVu Sans", rankdir=TB,splines=line;]
labeljust=right;[/html]

กำหนด attribute ของ graph คือ
– ให้แต่ละ node มีความห่าง 0.5
– ใช้ font “DejaVu Sans”
– มีการเรียงลำดับจาก Top to Bottom
– ลักษณะการโยงเส้นให้เป็นเส้นตรง
– ตำแหน่งตัวหนังสือของ label ให้ชิดที่ขอบขวา

[html]
subgraph cluster_0{
"A"; "B"; "C";
label = "Master";
color=blue;
rankdir=LR;
{rank=same; A; B;C}
}
[/html]

สร้าง sub graph มีรูปแบบเป็น cluster คือจะมีกรอบล้อมรอบ
– มี node member ชื่อ A, B และ C
– มีชื่อ label ของกรอบว่า Master
– มีสีน้ำเงิน
– มีการจัดเรียงแบบ Left to Right
– ให้ทุก node อยู่ตำแหน่งเดียวกัน

[html]
A->B[dir=both]
A->D;
[/html]

A->B[dir=both] คือให้ลากเส้นจาก A ไปหา B โดยมีหัวลูกศรอยู่ทั้งสองทาง
A->D คือลากเส้นจาก A ไปหา D

ถ้าใครสนใจลองเอา code ไปเขียนที่เวปนี้ได้ครับ http://sandbox.kidstrythisathome.com/erdos/
หรือถ้าใครใช้ linux อยู่ ให้ติดตั้งโปรแกรม graphviz ก็ได้ แล้ว render file แบบนี้ครับ

[shell]
$ dot -Tpng file.dot > file.png
[/shell]

ก้จะได้รูปภาพออกมาเช่นเดียวกันครับ

ball Written by:

Teerapat Khunpech Live, Tech, Beers, Bike, Cafe Racer, Docker, Devops, Eco-System