Cytoscape. js & cose-bilkent: оптимальные параметры для предотвращения перекрытия узлов и ребер - PullRequest
0 голосов
/ 02 апреля 2020

Мне нужно нарисовать относительно небольшие (максимум 20 узлов) сетевые графики с помощью Cytoscape. js. В большинстве случаев графики выглядят хорошо, но иногда возникают проблемы. Иногда узлы расположены слишком близко или возникают другие проблемы. Ниже приведено несколько примеров:

example 1

example 2

Часто некоторые ребра также перекрываются, хотя не должно быть затруднительно расположить узлы так, чтобы не происходило перекрытие.

Я экспериментировал с параметрами, однако, поскольку существует так много переменных, было очень трудно найти оптимальную комбинацию.

Параметры Я использую банкомат:

cy.layout({
  name: "cose-bilkent",
  animate: false,
  idealEdgeLength: 30,
  quality: "proof",
  randomize: false,
  nodeDimensionsIncludeLabels: true,
  nodeRepulsion: 7000,
  edgeElasticity: 0.45,
  nestingFactor: 0.1,
  numIter: 30000,
  gravity: 0.25,
  tile: true
}).run();

Что мне настроить?

РЕДАКТИРОВАТЬ:

Несколько примеров изображений для Стефана (пожалуйста см. комментарий):

demo 1 demo 2

1 Ответ

3 голосов
/ 04 апреля 2020

Ни cose-bilkent, ни fcose не имеют механизма, предотвращающего перекрытие краев. Это на самом деле трудно достичь в алгоритмах силового направления. С другой стороны, эти два алгоритма пытаются по возможности предотвратить перекрытия узлов, но это может случаться редко, особенно если график плотный.

Одним из способов уменьшения вероятности перекрытия является увеличение параметра idealEdgeLength в обоих алгоритмах, что будет поддерживать более раздельные узлы. Также используйте randomize: true, если нет причин препятствовать применению макета с нуля. Но я предлагаю вам использовать алгоритм fcose, если ваш график плоский (или почти плоский), потому что fcose обычно лучше справляется с обеспечением плоских вложений плоских графов.

...