2014-01-25 131 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空間中。