哪个图形可视化库适用于带有文本的静态节点和边?
Which graph visualization library is suitable for static node and edges with text?
我想在 Java 中实现一个图表。我定义了 class Node
和 class Edge
,图形用节点列表表示,对于每个节点,定义了从该节点开始的边列表作为节点的字段。现在我想使用一些 Java 库来可视化图形。
目前我已经试过了graphviz-java。结果符合我的要求,但是边和节点没有放好。见下图:
我通过遍历图表的节点列表而不是生成原始点文件文本,使用它提供的 API 创建了图表,如 node(xxx)
、addLink()
。
创建图的关键代码如下:
for (LiteralNode litNode : literalNodeArrayList)
{
MutableNode mutableNode = mutNode(litNode.getNodeElement());
for (Edge e : litNode.getEdgeList()) {
MutableNode endNode = mutNode(e.endNode.getNodeElement());
mutableNode.addLink(to(endNode.port(Compass.NORTH)).add(Arrow.VEE));
}
mutableNodes.add(mutableNode);
g.add(mutableNode);
}
这基本上是简单的循环遍历。节点和边根据不同情况动态变化
我希望节点和边调整位置,使图形显示更好。我也尝试过使用 json 文件和 d3js 来可视化图形,但我发现这些库过于关注显示大量节点及其分布,而我不需要这些。我喜欢带有一些分层的结构 graphviz。所以我想得到一些建议。
我提到了 json 文件,因为如果没有可用的 Java 库,我不妨尝试一些 java 脚本库,如 d3js 并且只使用 java 作为用于生成我需要输入的 json 文件的后端工具。所以推荐不限于Java.
我觉得这张图不错。 "I would like the node and edges adjust the location to make the graph display better." 是什么意思?
支持所有 graphviz 属性 (https://graphviz.gitlab.io/_pages/doc/info/attrs.html)。
- 节点距离设置为 "ranksep" 和 "nodesep"。
- 要强制节点处于同一级别,请添加一个带有 "rank=same" 的子图和应对齐的节点。
这是一个简单的例子:
Graph g = graph()
.graphAttr().with(attr("ranksep", .1), attr("nodesep", .1))
.with(graph().graphAttr().with(Rank.SAME).with(node("a"), node("c")))
.with(node("a").link("b"), node("b").link("c"));
我想在 Java 中实现一个图表。我定义了 class Node
和 class Edge
,图形用节点列表表示,对于每个节点,定义了从该节点开始的边列表作为节点的字段。现在我想使用一些 Java 库来可视化图形。
目前我已经试过了graphviz-java。结果符合我的要求,但是边和节点没有放好。见下图:
我通过遍历图表的节点列表而不是生成原始点文件文本,使用它提供的 API 创建了图表,如 node(xxx)
、addLink()
。
创建图的关键代码如下:
for (LiteralNode litNode : literalNodeArrayList)
{
MutableNode mutableNode = mutNode(litNode.getNodeElement());
for (Edge e : litNode.getEdgeList()) {
MutableNode endNode = mutNode(e.endNode.getNodeElement());
mutableNode.addLink(to(endNode.port(Compass.NORTH)).add(Arrow.VEE));
}
mutableNodes.add(mutableNode);
g.add(mutableNode);
}
这基本上是简单的循环遍历。节点和边根据不同情况动态变化
我希望节点和边调整位置,使图形显示更好。我也尝试过使用 json 文件和 d3js 来可视化图形,但我发现这些库过于关注显示大量节点及其分布,而我不需要这些。我喜欢带有一些分层的结构 graphviz。所以我想得到一些建议。
我提到了 json 文件,因为如果没有可用的 Java 库,我不妨尝试一些 java 脚本库,如 d3js 并且只使用 java 作为用于生成我需要输入的 json 文件的后端工具。所以推荐不限于Java.
我觉得这张图不错。 "I would like the node and edges adjust the location to make the graph display better." 是什么意思?
支持所有 graphviz 属性 (https://graphviz.gitlab.io/_pages/doc/info/attrs.html)。
- 节点距离设置为 "ranksep" 和 "nodesep"。
- 要强制节点处于同一级别,请添加一个带有 "rank=same" 的子图和应对齐的节点。
这是一个简单的例子:
Graph g = graph()
.graphAttr().with(attr("ranksep", .1), attr("nodesep", .1))
.with(graph().graphAttr().with(Rank.SAME).with(node("a"), node("c")))
.with(node("a").link("b"), node("b").link("c"));