3

下の画像のように、 JUNG2を使用して表示したいグラフがあります。

ここに画像の説明を入力してください

JUNG2のいくつかのレイアウトで遊んだことがありますが、常に次のような画像が表示されます。

ここに画像の説明を入力してください

新しいレイアウトを書かずに、グラフを思い通りにレイアウトすることはできますか?

前もって感謝します

ドミトリ

UPD:グラフを視覚化するために使用したコードは次のとおりです。

private Embedded createSampleGraph() {
Embedded imageComponent = null;

try {
    final DocumentBuilderFactory docBuilderFactory =
            DocumentBuilderFactory
                    .newInstance();
    final DocumentBuilder docBuilder =
            docBuilderFactory.newDocumentBuilder();
    final Document document = docBuilder.newDocument();
    final Element svgelem = document.createElement("svg");
    document.appendChild(svgelem);

    final SVGGraphics2D graphic2d = new SVGGraphics2D(document);

    final Graph<String, String> graph = createGraph();
    final VisualizationImageServer<String, String> server =
            createServer(graph);

    server.printAll(graphic2d);

    final Element el = graphic2d.getRoot();
    el.setAttributeNS(null, "viewBox", "0 0 350 350");
    el.setAttributeNS(null, "style", "width:100%;height:100%;");

    final ByteArrayOutputStream bout = new ByteArrayOutputStream();

    final Writer out = new OutputStreamWriter(bout, "UTF-8");
    graphic2d.stream(el, out);

    final JungResource source = new JungResource(bout);

    TPTApplication.getCurrentApplication().addResource(source);

    imageComponent = new Embedded("", source);

    imageComponent.setWidth(DEFAULT_WIDTH_PIXELS, UNITS_PIXELS);
    imageComponent.setHeight(DEFAULT_HEIGHT_PIXELS, UNITS_PIXELS);
    imageComponent.setMimeType("image/svg+xml");
    addComponent(imageComponent);
} catch (final UnsupportedEncodingException exception) {
    LOGGER.error(ErrorCodes.M_001_UNSUPPORTED_ENCONDING, exception);
} catch (final SVGGraphics2DIOException exception) {
    LOGGER.error(ErrorCodes.M_002_SVG_GRAPHICS_2D_IO, exception);
} catch (final ParserConfigurationException exception) {
    LOGGER.error(ErrorCodes.M_003_PARSER_CONFIGURATION, exception);
}
return imageComponent;
}

private VisualizationImageServer<String, String> createServer(
    final Graph<String, String> aGraph) {
final Layout<String, String> layout = new FRLayout<String, String>(
        aGraph);

layout.setSize(new Dimension(300, 300));
final VisualizationImageServer<String, String> vv =
        new VisualizationImageServer<String, String>(
                layout, new Dimension(350, 350));
vv.getRenderContext().setVertexLabelTransformer(
        new ToStringLabeller<String>());
return vv;
}

private Graph<String, String> createGraph() {
final Graph<String, String> graph =
        new DirectedSparseMultigraph<String, String>();
final String vertex1 = "IE";
final String vertex2 = "P1";
final String vertex3 = "P2";
final String vertex4 = "P3";
final String vertex5 = "FE";

graph.addVertex(vertex1);
graph.addVertex(vertex2);
graph.addVertex(vertex3);
graph.addVertex(vertex4);
graph.addVertex(vertex5);

graph.addEdge("1", vertex1, vertex2, EdgeType.DIRECTED);
graph.addEdge("2", vertex2, vertex3, EdgeType.DIRECTED);
graph.addEdge("3", vertex3, vertex5, EdgeType.DIRECTED);
graph.addEdge("4", vertex1, vertex4, EdgeType.DIRECTED);
graph.addEdge("5", vertex4, vertex5, EdgeType.DIRECTED);
return graph;
}

UPD 17.03.2011

これで、次のようなグラフを描くことができます。

ここに画像の説明を入力してください

4

3 に答える 3

4

特定の頂点の位置を固定する場合は、を作成した後、 /Layoutに追加する前に、それぞれに対して次の手順を実行します。VisualizationViewerVisualizationImageServer

layout.setLocation(v、location);
layout.lock(v、true);

http://jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/layout/Layout.html

于 2011-03-17T18:08:05.293 に答える
1

これは、JUNGで頂点とエッジを作成する方法と関係があります。

ヘッドスタートとして、JUNGのjung-samples-2.0.1.jarにあるedu.uci.ics.jung.samplesパッケージのJUNGサンプルWorldMapGraphDemo.classのcreateVertices()メソッドとcreateEdges()メソッドを参照することをお勧めします。 2.0フレームワークライブラリ。

メソッドで使用されるアプローチは、Mapオブジェクトを使用してユーザー定義の頂点とエッジの情報を格納する他の提供された例と比較してより明確です。残りは、ランダムに生成された、ライブラリによって生成された、またはファイルによって生成された情報を使用します。

明確になったら、PluggableRendererDemo.classを参照して、グラフを改善できます(それぞれのパッケージedu.uci.ics.jung.visualization.decoratorsおよび edu.uci.ics.jung.visualizationの下でTransformerクラスとRendererクラスを装飾するなど)。頂点、エッジ、方向矢印、形状、サイズなどを装飾およびレンダリングするためのレンダラー)

于 2011-03-14T02:43:24.647 に答える
1

わかりました...今、私はあなたが本当に解決したいことを理解しています。Dmitri、別のJUNGの例であるL2RTreeLayoutDemo.classを確認できます...これは、達成したいものに非常に近いように見えます。

または、以下のSO投稿を調べることが できます。Jungグラフィックは毎回同じ場所に表示できますか?

于 2011-03-14T14:01:19.350 に答える