Egloos | Log-in
F/OSS study
F/OSS study
[graphviz] 간편하게 그래프 그리기
graphviz: 2.20.2


graphviz는 graph visualization software로
간단한 문법의 텍스트 언어를 분석하여 자동으로 그에 맞는 그래프를 만들어 주는 도구이다.

graphviz가 제공하는 도구 중에서 가장 유용하게 쓰이는 것은 dot과 neato이며,
dot은 DAG(directed acyclic graph 혹은 digraph)를 생성할 때 사용하고
neato는 일반적인 (undirected) graph를 생성할 때 사용한다.
생성된 그래프는 bmp, gif, png, svg, ps, pdf 등의 다양한 형식으로 출력할 수 있다.

기본적인 문법은 매우 간단하며 dot과 neato에서 거의 동일하다.

hello.dot:
graph G {
  hello -- world;
}

이를 다음과 같이 실행하면 아래의 그래프를 얻을 수 있다.

$ neato -Tpng hello.dot -o world.png


graph 키워드는 생성할 그래프가 undirected graph라는 것을 말해준다.
내부의 identifier는 기본적으로 노드로 해석되며, 해당 노드의 label로 사용된다.
'--' 기호는 (undirected) 그래프의 두 노드가 연결되었음을 뜻한다.

기본적으로 방향 그래프(DAG)는 top-down 방향으로 생성되며
각 노드는 연결된 순서에 따라 rank가 부여된다.
(정확한 rank의 값은 공개되어 있지만 않지만 아래로 내려갈 수록 rank가 커진다)
그래프의 방향을 바꾸고 싶다면 rankdir 키워드를 통해 지정할 수 있다.

좀 더 복잡한 그래프도 비교적 간단하게 그릴 수 있다.
앞서 살펴보았던 zlib의 처리 과정을 간략히 나타내면 다음과 같다.
(복잡하니 먼저 그림을 보자..;;)


zlib.dot:
digraph zlib {
  size = "7.5, 10";
  rankdir = LR;
 
  node [shape=box]
  next_in window;

  {
    rankdir = TB;
    ranksep = 0.1;

    int_buf [label="internal\nbuffer"];
    huffman [label="Huffman\ncoding", fontcolor=blue, shape=ellipse];
    pend_buf [label="pending\nbuffer"];
  }

  next_out [peripheries=2];

  subgraph cluster0 {
    label = "LZ77";    
    color = red;
    fontcolor = red;
    rank = same;

    node [shape=ellipse];
    rle [label="dist == 1"];
    default [label="normal"];
    filter [label="len > 5"];
  };

  /* edges */
  next_in -> window;
  window -> rle [label="Z_RLE"];
  window -> default [label="Z_DEFAULT_STRATEGY"];
  window -> filter [label="Z_FILTERED"];
  window -> huffman [label="Z_HUFFMAN_ONLY", labelfloat=true];
  window -> pend_buf [label="level=0 (stored block)"]
  rle -> int_buf;
  default -> int_buf;
  filter -> int_buf;
  int_buf -> huffman;
  huffman -> pend_buf;
  pend_buf -> next_out;
}

graphviz의 단점은 자동 생성된 그래프다보니 layout을 입맛에 맞게 지정하기가 힘들다는 것이다.
이를 위해서 lefty 등의 프로그램을 추가적으로 익힐 수도 있겠지만
그보다는 생성한 그래프를 SVG 형식으로 출력한 뒤
이를 inkscape 등으로 세부 수정 하는 것도 한 방법이 될 것이다.


== 참고 문서 ==

by namhyung | 2010/07/15 01:07 | Tips | 트랙백(3) | 덧글(2)
트랙백 주소 : http://studyfoss.egloos.com/tb/5358984
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from at 2014/03/11 00:40

제목 : garcinia cambogia fruit
line6...more

Tracked from Mocassins Ho.. at 2014/08/12 11:39

제목 : Mocassin Femme
Shopping online offers the great opportunity Mocassins Homme to compare prices and quality of merchandise with Tod's Pas Cher the convenience of secure payment options. Attend lastering events and practice talking to online,Mocassins Homme, as th ......more

Tracked from Tods Pas Che.. at 2014/08/12 11:41

제목 : Tod's Ferrari Homme
This im Tods Pas Cher pacted the first quarter close, but th Tods Homme Soldes e rollover of these deals for sales us for a strong start in our software and mainframe business in the second quarter. The Best Ways To Dry Them Out Mocassin Femme Any mo......more

Commented by SY Kim at 2010/07/16 17:56
이런 툴이 있는지 몰랐네요.

좋은 정보 보고 갑니다. ^^
Commented by namhyung at 2010/07/17 23:41
언제나 감사합니다.. ^^

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶

카테고리
General
Application
System
Kernel
Book
Tips
태그
bash binutils gcc compiler script blktrace block-layer linux glibc vcs synchronization CARM SMP elf CAaQA3 C git documentation patch emacs algorithm perf sed scm computer-architecture x86 kernel awk memory build
전체보기
이글루 파인더

최근 등록된 덧글
http://serbaserbiinfoterkini56..
by cakra at 09/22
informsi yang bagus dan b..
by cakra at 09/16
informsi yang bagus dan be..
by pordanaia at 08/05
최근 등록된 트랙백
Tod's Ferrari Homme
by Tods Pas Cher,Kodak did ..
Mocassin Femme
by Mocassins Homme, I got so..
natural garcinia cambogia
by
rss

skin by jiinny


X