使用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实现此类任务?默认布局似乎没有这样做。
答案 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空间中。