如何使用Jung定义边或顶点的属性?

时间:2014-03-19 10:12:18

标签: java jung

可能是一个天真的问题,但实际上我没有能够在图中定义边或顶点属性的函数。

鉴于我的图表是DirectedSparseGraph。

提前谢谢

1 个答案:

答案 0 :(得分:0)

在JUNG中使用edge / vertex属性有几种不同的方法。

(以下材料摘自JUNG手册,目前在 http://sourceforge.net/apps/trac/jung/wiki/JUNGManual。)

JUNG的许多方法都要求用户指定图形元素(顶点或边缘)与某种数据之间的关联:标签文本,边缘重量,颜色等。按照惯例,这通常通过变压器。

Transformer是一个commons-collections接口,带有单个方法转换(I输入),可以为任何输入返回输出类型(O)的某个对象。这实际上定义了输入和输出类型的元素之间的关系。从某种意义上说,它就像Map一样,除了它更轻巧,是只读的。

有几种不同的方法可以编写其中一种变形金刚。这适用于您要求提供变压器的任何地方。

(1)常数值。为此目的,实际上是一个ConstantTransformer类(在commons-collections中)。这对于您要求变换器的情况非常有用,但实际上所有元素都应该具有相同的值(例如,当它是未加权的图形时提供边缘权重)。

(2)地图支持 - 新地图或基于现有地图。有一个MapTransformer类(同样,commons-collections)处理这种情况。当您拥有与元素一样多的不同值时,或者当没有明显的模式将元素与值/输出相关联时,这非常有用。

(a)新地图:对于每个元素,您在Map中创建一个(元素,值)对。如果这些价值观与其他任何事物无关,那么这可能是合适的......虽然这可能非常罕见。

(b)现有的地图:通常你会有一个现有的查找表来完成你需要它(见下面的注释);无需创建新的。

(3)元素实例变量支持。这与Map支持的大致相同,但具有不同的存储模型。

(4)基于动态函数调用(计算,状态报告等)。

(p)上述的组合或变体,例如,变形金刚使用拣货信息来确定使用两种颜色中的哪一种。

请注意,在任何这些情况下,转换器都可以执行一个进程(映射,实例变量,函数调用),该进程输出除您想要的内容之外的其他内容(例如,浮点值)并将其转换为值适当的类型(例如,油漆)。例如,假设您想要将顶点绘制为红色(如果它们具有较高的PageRank),黄色(如果它们具有中等PageRank),并且如果它们具有低PageRank则为黑色。您可以轻松地构造一个Transformer类,它接收PageRank数据(可能由您提供给构造函数的Transformer提供),找出您想要的三个间隔中的哪一个,然后在给它一个顶点时输出适当的颜色。更进一步,编写一个基于阈值的通用Transformer甚至可以很容易地将Transformer从阈值变为颜色作为构造函数参数。

这真的是在JUNG中使用变形金刚的关键洞察力:我们试图以一种方式使用它们,这意味着你可以尽可能少地完成工作,比如运行一个边缘算法权重基于事件顶点(代表作者)共同撰写的论文数量,或创建顶点颜色是活动水平函数的可视化。