Какая библиотека визуализации графиков подходит для статических узлов и ребер с текстом? - PullRequest
0 голосов
/ 22 апреля 2019

Я хотел бы реализовать граф на Java.Я определил класс Node и класс Edge, и график представлен списком узлов, и для каждого узла список ребер, начиная с узла, определяется как поле узла.Теперь я хотел бы использовать библиотеку Java для визуализации графика.

В настоящее время я пробовал graphviz-java .Результат соответствует моему требованию, но ребра и узлы расположены неправильно.См. Следующий график ниже:

graphviz-java result

Я создал график с 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 file и d3js для визуализации графика, но я обнаружил, что эти библиотеки слишком сосредоточены на отображении огромного количества узлов и их распределений, которые мне не нужны.Мне нравится структура графика, обеспеченная некоторой стратификацией.Поэтому я хотел бы получить некоторые рекомендации.

Я упомянул файл json, потому что, если нет доступной библиотеки Java, я мог бы также попробовать какую-нибудь библиотеку javascript, например d3js, и использовать java только как инструмент бэкэнда для генерации файла json, который мне нужно ввести.Таким образом, рекомендация не ограничивается Java.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Поддерживаются все атрибуты 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"));
0 голосов
/ 13 мая 2019

График выглядит хорошо для меня. Что вы подразумеваете под "Я хотел бы, чтобы узел и ребра корректировали местоположение, чтобы сделать отображение графика лучше."?

...