0

使用 JDK 1.7+Jung2。

我有一个相似度矩阵,并想使用 jung2 图以图形方式对其进行分析。我的数据集由以下数据组成:

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

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

我想创建一个图,其中顶点之间的距离与其边缘值成正比。对于上面的示例,对象 1 将被放置在更靠近对象 2 而非对象 3 的位置,因为 sim(object1,object2) > sim(object2,object3)。

如何使用 Jung2 完成这样的任务?默认布局似乎没有这样做。

4

1 回答 1

0

这取决于您打算使用的布局。对于SpringLayout,您可以将 aTransformer作为参数传递给构造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 空间中。

于 2014-01-25T18:46:23.417 回答