2014-01-25 128 views
0

使用JDK 1.7 + Jung2。如何设置边缘长度与边缘值成比例

我有一个相似性矩阵,想用图形分析它使用jung2图。我的数据集由数据等组成:

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

对于每一行,该值表示先前对象之间的相似性(即:object1具有0.54454相似性Object2的)

我要创建的曲线图,其中顶点之间的距离与它们的边缘值成正比。 对于上面的示例,由于sim(object1,object2)> sim(object2,object3),object1将放置在比object3更接近object2的位置。

如何使用Jung2来实现这样的任务?默认布局似乎不这样做。

回答

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空间中。