Jgraph

Jgraph is a tool for drawing graphs and structured drawings. Unlike most drawing tools, jgraph is non-interactive — its takes an input file, and produces either plain or encapsulated PostScript as output.

그래프를 그릴 때 pyplot을 사용하고 싶지만, 우리 연구실에서 jgraph를 쓰므로 jgraph의 사용법을 알아보았다.

jgraph는 아래와 같이 사용할 수 있다. in.jgr에 jgraph 형식으로 그래프를 작성하면, jgraph가 옵션에 따라 이를 eps 또는 ps로 변환해 출력한다. 결과물을 redirection해 파일에 저장하면 된다.

$jgraph in.jgr > out.eps #eps output
$jgraph -P in.jgr > out.ps #postscript output

in.jgr의 파일 내용이 다음과 같다고 하자. (jgraph의 모든 그래프는 예약어 newgraph로 시작한다.)

newgraph
newcurve pts 2 3 4 5 1 6

$jgraph in.jgr을 입력하면 eps 형식의 텍스트가 표준 출력으로 출력된다.

%!PS-Adobe-2.0 EPSF-1.2
%%Creator: jgraph
%%BoundingBox: -13 -14 219 219
%%EndComments

1 setlinecap 1 setlinejoin
0.700 setlinewidth
0.00 setgray

/Jrnd { exch cvi exch cvi dup 3 1 roll idiv mul } def
...

이를 redirection해서 파일에 저장하면 그래프를 볼 수 있다.
$jgraph in.jgr > out.eps
jgraph

jgraph는 띄어쓰기를 기준으로 입력값을 해석해서 그래프를 그린다. 공백 한 개는 공백 n개, 엔터, 탭과 동일하다. 앞에서 본 코드와 이 코드는 완벽히 동일한 그래프를 그린다.

newgraph
 newcurve
pts             2          3 4   5 1 6

jgraph 파일에서 다른 jgraph 파일을 include할 수 있다. fileToInclude.jgr이 있다고 하자. 다른 jgraph 파일에서 다음과 같이 include할 수 있다.

include fileToInclude.jgr

jgraph 파일에서 주석은 (* *) 안에 입력하면 된다.

(* comment *)
newgraph
newcurve pts 2 3 4 5 1 6

다음은 line을 그리는 예제이다.

newgraph
newcurve
pts 0 6  1 9  2 11  3 14  4 18 5 20
newcurve marktype none linetype solid
pts 0 3  1 4  2 7  3 9  4 10 5 13
newcurve marktype triangle linetype dashed color 1 0 0 
pts 0 0  1 2  2 3  3 5  4 6  5 9 

jgraph

그래프 위에 점을 찍을 때에도, 선을 그릴 때에도 newcurve로 시작한다. 다음으로 marktype, linetype, color를 지정해주고, pts로 점을 명시해주면 된다. 입력은 (x, y) 좌표를 차례대로 쓰면 된다. 세 점 (a, b), (c, d), (e, f)을 찍고 싶다면 다음의 파일을 jgraph의 입력으로 주면 된다.

newgraph
newcurve pts a b c d e f

한편, “newcurve marktype none linetype solid”는 예약어 newline으로 대체할 수 있다. 이전과 동일한 속성의 그래프를 그리고 싶다면, newcurve 대신에 copycurve를 사용할 수도 있다.

newgraph
newcurve
pts 0 6  1 9  2 11  3 14  4 18 5 20
newcurve marktype none linetype solid
pts 0 3  1 4  2 7  3 9  4 10 5 13
copycurve marktype triangle
pts 0 0  1 2  2 3  3 5  4 6  5 9 

jgraph

axis에서 지정할 수 있는 속성으로는 다음과 같은 것들이 있다.

size n -- set the size to n inches.
min n -- set the minimum value to n.
max n -- set the maximum value to n.
hash n -- put a hash mark and label every n values.
mhash n -- put n minor hash marks between every major hash mark.
gray n -- set the greyscale of the axis to n (where zero is black and one is white).
color r g b -- set the color of the axis to the given rgb value.
nodraw -- do not draw any part of the axis.
draw -- make sure that all parts of the axis are drawn.
log -- make the axis logarithmic.
log -- make the axis linear.
no_draw_hash_marks -- do not draw the hash marks.
no_draw_hash_labels -- do not draw the hash labels.
draw_at n -- put the axis at some place other than the minimum value.
label l -- set the label of the axis.

개인적으로 설명 없이 이해하기 힘들었던 부분은 hash이다. hash란 눈금을 가리키는 것으로, hash n은 n마다 눈금을 긋겠다는 것이다. mhash는 hash 단위로 나눈 길이를 다시 몇 번의 눈금으로 표현할 것인지 가리킨다. hash 2 mhash 4로 설정한다면, 0, 2, 4, 6…에 큰 눈금이 새겨지고, 0.2, 0.4, 0.6, 0.8…에 작은 눈금이 새겨진다.

jgraph에서 다음과 같이 문자열을 삽입할 수 있다.

newgraph

xaxis min 0 max 10 hash 1 mhash 0 size 7
yaxis min 0 max 10 hash 1 mhash 0 size 7

newstring hjl vjc x 1 y 1 : String #1
newstring hjr vjt x 9 y 1 fontsize 20 lcolor 1 0 0 : String #2
copystring hjl vjb x 1 y 2 fontsize 16 font Times-Italic : String #3
newstring hjr vjt x 9 y 2 fontsize 16 font Helvetica : String #4
newstring hjc vjc x 5 y 2 fontsize 16 font Symbol : String #5
newstring hjl vjb fontsize 45 font Courier rotate 90 x 5 y 5 : String #6

jgraph

newstring으로 문자열을 생성하고, 위치를 지정함으로써 그래프에 문자열을 삽입할 수 있다. 문자열 삽입에서 이해하기 힘들었던 것은 이해할 수 없는 약어들이다. (hjl, hjc, hjr, vjt, vjc, vjb) 이 약어들은 주어지는 x, y 좌표가 문자열의 어느 지점을 나타내는지 표시한다. 주어진 좌표가 문자열의 좌측 상단을 의미한다면 hjl vjt, 우측 하단을 의미한다면 hjr vjb를 사용하면 된다.

jgraph에서 범례를 삽입할 수 있다.

newgraph

xaxis hash 2 mhash 4

newcurve label : plotOne
pts 0 6  2 11  3 14  4 18 5 20 
newline label : plotTwo
pts 0 3  2 7  3 9  4 10 5 13 
copycurve marktype triangle label : plotThree
pts 0 0  2 3  3 5  4 6  5 9 

jgraph
curve 다음에 label과 레이블명을 주어, 범례를 삽입할 수 있다.

그리고 범례는 string과 마찬가지로 임의의 좌표에 위치시킬 수 있고, 회전시킬 수도 있다.

newgraph

xaxis hash 2 mhash 4

newcurve label : plotOne
pts 0 6  2 11  3 14  4 18 5 20 
newline label : plotTwo
pts 0 3  2 7  3 9  4 10 5 13 
copycurve marktype triangle label : plotThree
pts 0 0  2 3  3 5  4 6  5 9 

legend defaults font Times-Italic fontsize 20 rotate 30 hjl vjt x 6 y 0

jgraph

Bar graph는 다음의 코드로 그릴 수 있다.

newgraph

xaxis 
min 0.1 max 4.9 
hash 1 mhash 0 no_auto_hash_labels
size 3.5

yaxis 
min 0 max .4
size 2    
precision 3 

newcurve marktype xbar cfill 1 0 0 marksize .8 
pts
1 .390
2 .389                
3 .353                        
4 .343                                

xaxis                                 
hash_label at 1 : Larry Walker          
hash_label at 2 : Tony Gwynn              
hash_label at 3 : Mike Piazza               
hash_label at 4 : Kenny Lofton                
hash_labels hjl vjc font Helvetica rotate -90   

yaxis label : Batting Average                   

title : NL Batting Leaders, August 5, 1997    

jgraph

다른 것은 직관적으로 이해 가능하지만, mark size가 어떤 것을 의미하는지 모호하다. mark size란 bar graph에서 bar의 가로 길이를 의미한다.

한 그림 안에 여러 개의 그래프를 그리려면 x_translate, y_translate를 사용하면 된다.

newgraph
xaxis min 0 max 10 size 1 label fontsize 16 font Times-Italic : Graph 1
yaxis min 0 max 10 size 1

newcurve marktype box linetype solid pts 1 10 2 8 5 5 8 3 10 2

copygraph 
x_translate 2
xaxis label : Graph 2
newcurve marktype box linetype solid pts 10 10 8 8 5 5 8 3 10 2

jgraph

References:
[1] James S. Plank, Jgraph — A Filter for Plotting Graphs in Postscript, http://web.eecs.utk.edu/~plank/plank/jgraph/jgraph.html
[2] James S. Plank, Jgraph – A Filter for Plotting Graphs in PostScripthttp://web.eecs.utk.edu/~plank/plank/papers/USENIX-93W.ps.Z
[3] James S. Plank, Jgraph lecture notes, http://web.eecs.utk.edu/~plank/plank/classes/cs494/494/notes/Jgraph/lecture.html

Advertisements
Tagged with: , , ,
Posted in 2) Computer Engineering

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 101,726 hits
%d bloggers like this: