JUNG 2.0でグラフ描画

Javaのグラフライブラリのjungを使ってグラフの描画をする方法のメモ.

インストール

とりあえず,ここから最新のライブラリを落としてくる.
(2010/3/7現在ではjung2-2_0_1.zip)



これを解凍するとjarファイルが大量に入っているので,
/usr/local/lib/javaフォルダなどを作り,その中にすべて放り込む.



あとは,.zshrcなどに

export CLASSPATH=/usr/local/lib/java/\*:$CLASSPATH

などと書いてパスを通せば出来上がり.

使い方

javadocを見るのが一番.

多分,これだけでは分からないので完全グラフを表示するサンプルプログラムを残しておく.

import edu.uci.ics.jung.algorithms.layout.*;
import edu.uci.ics.jung.graph.*;
import edu.uci.ics.jung.visualization.*;
import edu.uci.ics.jung.visualization.decorators.*;                                                                                      
import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.*;
import java.awt.*;
import javax.swing.JFrame;

public class JungTest {
    public static final int WIDTH = 500;
    public static final int HEIGHT = 500;
    public static final int MARGIN = 50;

    public static void main(String[] args) {
        new JungTest().run();
    }
    public void run(){
        showGraph(makeGraph(5));
    }
    Graph<Integer,String> makeGraph(int size) {
        Graph<Integer, String> g = new SparseGraph<Integer, String>();
        for(int i=0;i<size;++i)g.addVertex(i);
        int num = 0;
        for(int i=0;i<size;++i)for(int j=0;j<i;++j){
                g.addEdge(""+num++, i, j);
        }
        return g;
    }
    void showGraph(Graph<Integer, String> g){
        Layout<Integer, String> layout = new CircleLayout<Integer, String>(g);
        layout.setSize(new Dimension(WIDTH,HEIGHT));
        BasicVisualizationServer<Integer,String> vv = new BasicVisualizationServer<Integer,String>(layout);
        vv.setPreferredSize(new Dimension(WIDTH+MARGIN,HEIGHT+MARGIN));
        vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<Integer>());
        vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller<String>());
        vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<Integer,String>());
        vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
        JFrame frame = new JFrame("Jung Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv);
        frame.pack();
        frame.setVisible(true);
    }
}

実行すると次のようなフレームが表示される.