将带有位置、颜色等信息的networkx图形写入gexf文件

3
我使用networkx构建了一个图形,并使用弹簧布局函数生成了一个漂亮的图表,但不幸的是这并没有转移到gexf文件中。
我认为networkx工具的重点是能够编写可读的图形文件,因此如果有简单的Python解决方案,我会犹豫手动更改xml。
这里是我想要的格式链接,因为最终目标是使用sigma js工具将其放入网页中。

https://github.com/jacomyal/sigmajs.org/blob/master/assets/data/les-miserables.gexf

更具体地说,这是一个格式示例: http://gexf.net/format/viz.html

这是使用《悲惨世界》角色的Gephi示例。有没有一种方法可以仅使用nx.write_gexf(G, "")命令并同时明确编写属性以输出相同格式?


这个问题解决了吗?下面的回复有用吗? - A_A
1个回答

5
这更多是一个GEPHI的“问题”,而不是Networkx的问题。
简单来说,networkx.write_gexf 将尝试导出gexf文件可以描述的每个可能的节点和边属性。然后由GEPHI的用户重新分配特定的节点或边属性到内部的GEPHI属性。
稍微详细一点,假设:
import networkx

#Create a Graph
G = networkx.Graph()
G.add_node("Alpha", X=10, Y=10)
G.add_node("Beta", X=-10, Y=-10)
G.add_path(["Alpha", "Beta"])

考虑到这个图,现在让我们尝试使用以下方式将其保存为GEXF格式:

#Attempt to save the graph in gexf
#PLEASE NOTE: This call will succeed and MyGraph will be created on the disk.
#You can now do a cat MyGraph.gexf and verify that attributes X and Y are indeed included in the file.
networkx.write_gexf(G, "MyGraph.gexf)

#Add another node with an attribute of type tuple
G.add_node("Gamma", pos=(5,5))

#Attempt to save the graph in gexf again
#PLEASE NOTE: This call will fail because it is impossible to 'unpack' the tuple without further knowledge
networkx.write_gexf(G, "MyOtherGraph.gexf")

现在,networkx.layout(例如pos = networkx.layout.random_layout(G))将节点的位置作为可迭代数组返回,并且这些位置可以保存回节点,但是如上面的示例所示,如果您尝试保存具有此类节点属性的图形,则会失败。
因此,我担心您将不得不解压缩布局返回的坐标并将它们分配给单个节点属性,就像上面所描述的那样(请参见此处使用的属性XY)。
完成后,图表可以无任何问题地导出。

现在,一旦进入Gephi并实现将节点属性重新分配给内部Gephi属性,您首先需要安装this plugin。完成后,按照正常方式将图形加载到GEPHI中,然后切换到“数据实验室”视图,在其中可以看到所有节点及其属性。假设您已经安装了重塑插件,请单击“更多操作”,然后单击“设置标准列”(sic)。这将启动一个相当自我解释的对话框,允许您将特定于图形的属性“映射”到内部GEPHI属性,例如X坐标。使用此功能分配两个坐标,然后切换到“概述”视图以查看节点重新定位到其保存的位置。

希望这有所帮助。


更新链接:https://gephi.org/plugins/#/plugin/recast-column - Dr Xorile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接