gpt4 book ai didi

java - GraphML 节点着色 Prefuse

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:30 33 4
gpt4 key购买 nike

我有一个 prefuse 应用程序,用于加载 GraphML 文件,其中节点具有“Color”字符串属性。即。

<node id="1">
<data key="Color">Green</data>
<node>

我想允许指定一系列预定义颜色,并且不想强制创建 GraphML 的程序使用所有颜色。

我认为这将是一个简单的任务(也许确实如此?),但 Prefuse 似乎处处与我作斗争。我提出了两个部分解决方案,但它们都有各自的问题。我的第一种方法是手动添加与“Color”字符串相关的新 Integer 属性,如下所示:

// Add new property to Graph g
g.addColumn("ColorNumber", int.class);

// Add property to each node
Iterator<Node> it = g.nodes();
while(it.hasNext()) {
Node n = it.next();
String type = n.getString("Color");
// Compare to an array of accepted types
for(int i=0; i < colorMap.length; i++) {
if(type.equalsIgnoreCase(colorMap[i])) {
n.setInt("ColorNumber", i);
break;
}
}
}

然后,您可以使用 prefuse 的默认颜色管理器将这些整数链接到数组索引。

draw.add(new DataColorAction("graph.nodes", "ColorNumber", Constants.NUMERICAL, VisualItem.FILLCOLOR, fillArray));

这种方法的最大问题(除了不优雅之外)是,当用户指定的唯一颜色少于三种时,它会失败。如果指定了两种颜色,则 prefuse 使用颜色数组的第一个和最后一个元素。如果有的话,第一个。嗯。

我的另一个解决方案是手动设置每个节点的颜色。

// Iterate over VisualItems in Visualization vis
Iterator<VisualItem> v_it = vis.items("graph.nodes");
while(v_it.hasNext()) {
VisualItem item = v_it.next();
String type = item.getString("Color");
for(int i=0; i < typeMap.length; i++) {
if(type.equalsIgnoreCase(typeMap[i])) {
item.setFillColor(fill[i]);
item.setEndFillColor(fill[i]);
break;
}
}
}
vis.repaint();

这适用于任意数量的颜色,但会随机困惑。我认为 prefuse 在自己的线程上处理这些方法,由于某种原因,该线程运行缓慢。对于较小的网络,我可以设置固定的等待时间(我还没有找到可以使用的 Thread.join() 方法)。但是,对于大型网络来说,这会失败(读:使我的计算机崩溃)。

所以,你已经明白了。为本来应该是微不足道的任务投入不必要的大量时间。有人设法做到这一点吗?有简单的方法吗?请告诉我我想太多了。

最佳答案

我非常了解 prefuse 的这些经历:-/

第一种方法是正确的,但指定了错误的数据类型。颜色是一个NOMINAL变量。

DataColorAction color = new DataColorAction("graph.nodes", "Color",
Constants.NOMINAL, VisualItem.FILLCOLOR, fillArray);

ColorNumber 字段不是必需的。

您对第二种方法的结论是正确的。 prefuse 在单独的线程中运行其 ActionList。因此,不应手动设置视觉属性。

如果需要更细粒度的代码,您可以扩展DataColorAction

关于java - GraphML 节点着色 Prefuse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10019329/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com