Cytoscape 布局使用节点属性作为坐标?

Cytoscape layout to use node attributes as coordinates?

有没有办法使用存储为每个节点的属性的 x,y 坐标来使用另一个程序计算的坐标来布置图形?

如果没有,是否有可能以某种方式实现这一点——人们如何着手呢?

是否有一种标准的方式来以某种方式向 cytoscape.js 网络查看器提供节点位置?

背景:使用Pythonnetworkx计算一些Cytoscape不支持的布局是微不足道的,将坐标存储为节点属性也是微不足道的。所需要的只是让 Cytoscape 以某种方式使用这些坐标来查找节点位置,而不是使用布局算法。

这是一件很容易做到的事情。在演示中使用此功能的许多示例,如您所见:

如您所见,在演示中和文档中都有大量这方面的示例。你可以看到一个 here and here:

// can use reference to eles later
var eles = cy.add([
  { group: 'nodes', data: { id: 'n0' }, position: { x: 100, y: 100 } },
  { group: 'nodes', data: { id: 'n1' }, position: { x: 200, y: 200 } },
  { group: 'edges', data: { id: 'e0', source: 'n0', target: 'n1' } }
]);

.add() 函数中使用的 json 可以在您的 js 应用程序中创建,或直接在 Python 中创建,并像某些示例一样添加到图表中。

一般来说,您应该花一些时间浏览一下文档。通过 xy 定位节点的能力是非常基本的,并且是文档中的第一页之一。

如果您不理解文档中的描述和我提供的示例,请编辑您的问题并将您当前的代码添加为 Minimal, Reproducible Example,您可以在其中展示您为实现定位所做的努力。


编辑:

正如@maxkfranz 指出的那样,preset layout plays a big role here. The documentation states this in the Initialisation Chapter

  • 如果您想自己在元素中指定节点位置 JSON,您可以使用预设布局——默认情况下它不设置任何位置,将节点保留在当前位置位置(即在初始化时在 options.elements 中指定).`

我是 Cytoscape 的新手,所以“简单”的事情对我来说并不那么容易。我常常甚至不知道提问的正确方式。每个人都有难的事和容易的事,我们一步一步地扩展知识,今天难的事明天可能会容易。

无论如何,这可能是您正在寻找的解决方案的一部分:

在 Cytoscape 桌面应用程序中,您可以创建一个将节点属性映射到“X 位置”并将另一个节点属性映射到“Y 位置”的“样式”。