1

我试图用我的 ETL(提取转换加载)管道描述不同数据实体的关系。最终输出是一个大的有向图。到目前为止,我正在使用 Python 来提取数据关系。Pydot 帮助我生成可以使用浏览器打开的 svg 文件。我生成的图表是静态的。

Pydot 允许我设置工具提示并允许我将其他 html 页面与节点或边缘链接起来。我正在寻找更多。

图表的一小部分如下所示

有向图

在此处输入图像描述

我想用这张图做几件事。

  • 每个节点都可以有多个属性(包括名称)。由于空间不足,我无法显示这些属性。但是当用户将鼠标悬停(或执行其他基于鼠标的操作)时,我希望这些属性显示为“浮动”表,如果用户不感兴趣,可以将其关闭。
  • 并非所有节点属性都是整数或字符串。它也可以是图表。例如,对于其中一个节点,我可能有一个条形图,显示该数据实体在过去 7 天内加载的频率。当用户在该节点上移动(单击)鼠标时,我希望该条形图浮动。目前我正在使用 matplotlib 生成与节点相关联的条形图/饼图(请参见上文)。我使用 pydot 中的 setURL 将这些图与我的原始有向图链接起来。但是用户体验不是很好,因为它会将用户带到一个新页面。
  • 我对默认情况下从 Pydot/GraphViz 获得的节点布局等感到满意。除非绝对必要,否则我不喜欢从头开始做所有事情。
  • 能够根据节点或边属性中的查询仅突出显示图形的某些部分

我阅读了这个论坛,并在回答与我类似的问题时遇到了几个选项。

  • 格菲
  • igraph(我玩过 igraph,它可以让我通过顶点或边进行查询。我不知道如何
    根据用户输入使最终的图形交互,例如鼠标悬停在节点上的浮动表等)
  • Javascript 库 - sigma.js、arbor.js、d3.js 节点箱
  • 网络X
  • 节点箱

我有 Python 技能,但在 Javascript 方面相当新手。我想从专家那里知道什么是我最好的选择(从功能和易用性的角度来看)。首选基于浏览器的解决方案。

任何建议/帮助将不胜感激。

谢谢阿比吉特

4

1 回答 1

1

试试 NetworkX。节点属性可以是任何可散列的,以便(至少)解决您的前两个项目符号。

您仍将使用 matplotlib 生成图表。我不知道有比这更好的解决方案。

于 2013-06-17T21:53:22.077 回答