如何设置与边缘值成比例的边长

时间:2014-01-25 18:32:08

标签: java jung2

使用JDK 1.7 + Jung2。

我有一个相似性矩阵,想要使用jung2图形进行图形分析。我的数据集由以下数据组成:

object1 object2 0.54454
object1 object3 0.45634
object2 object3 0.90023
[..]

对于每一行,该值表示先前对象之间的相似性(即:object1与object2的相似度为0.54454)

我想创建一个图形,其中顶点之间的距离与其边缘值成比例。 对于上面的示例,object1将被放置为更接近object2而不是object3,因为sim(object1,object2)> SIM(Object2的,object3)。

如何使用Jung2实现此类任务?默认布局似乎没有这样做。

1 个答案:

答案 0 :(得分:0)

这取决于您打算使用的布局。对于SpringLayout,您可以将Transformer作为length_function参数传递给构造函数,您可以将其简单地实现为

class EdgeLengthTransformer implements Transformer<Edge, Integer> {
    @Override
    public Integer transform(Edge edge) {
        int minLength = 100; // Length for similarity 1.0
        int maxLength = 500; // Length for similarity 0.0
        Vertex v0 = graph.getSource(edge);
        Vertex v1 = graph.getDest(edge);
        float similarity = obtainSimilarityFromYourDataset(v0, v1);
        int length = (int)(minLength + (1.0 - similarity) * (maxLength - minLength));
        return length;
    }
}

您必须始终考虑到 - 根据图表的结构 - 可能根本无法布置顶点。例如,如果相似性不服从http://en.wikipedia.org/wiki/Triangle_inequality,那么这些相似性就没有合适的嵌入到2D空间中。