python中的有向图

时间:2013-06-17 21:07:56

标签: python graph data-visualization directed-graph pydot

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

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

图表的一小部分如下所示

Directed Graph

enter image description here

我想用这张图做几件事。

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

我读了这个论坛并遇到了几个选项来回答类似我的问题。

  • gephi
  • igraph(我玩igraph,让我通过顶点查询 或边缘。我无法弄清楚如何制作我的最终图表 基于用户输入的交互,例如鼠标悬浮在桌子上 节点等)
  • Javascript库 - sigma.js,arbor.js,d3.js nodebox
  • networkX
  • nodebox

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

任何建议/帮助都将非常感激。

由于 作者Abhijit

1 个答案:

答案 0 :(得分:1)

尝试使用NetworkX。节点属性可以是任何可以清除的,因此至少可以解析前两个项目符号。

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