40

我需要定义一个社交网络,分析它并绘制它。我既可以手动绘制它,也可以手动分析它(计算各种指标)。但我不想重新发明轮子。

我曾尝试使用 matplotlib,但我需要以交互方式使用它,并在几行中告诉它如何加载数据,然后调用渲染函数,它将图形渲染为 SVG。

如何以所述方式可视化社交网络?

4

4 回答 4

32

networkx是一个非常强大且灵活的 Python 库,用于处理网络图。有向和无向连接可用于连接节点。网络可以通过添加节点然后连接它们的边来构建,或者简单地通过列出边对来构建(将自动创建未定义的节点)。一旦创建,节点(和边)可以用任意标签进行注释。

虽然networkx可用于可视化网络(请参阅文档),但您可能更喜欢使用网络可视化应用程序,例如Gephi(可从gephi.org 获得)。networkx支持多种导入和导出格式。如果您使用GraphML等格式导出网络,则导出的文件可以轻松加载到Gephi并在其中可视化。

import networkx as nx
G=nx.Graph()
G.add_edges_from([(1,2),(1,3),(1,4),(3,4)])
G
>>> <networkx.classes.graph.Graph object at 0x128a930>
G.nodes(data=True)
>>> [(1, {}), (2, {}), (3, {}), (4, {})]
G.node[1]['attribute']='value'
G.nodes(data=True)
>>> [(1, {'attribute': 'value'}), (2, {}), (3, {}), (4, {})]
nx.write_graphml(G,'so.graphml')
于 2013-03-16T23:32:04.013 回答
19

三个答案提到 Networkx 和 Gephi,但没有一个提到graph-tool。主要区别在于算法是用 C++ 实现的,与 Networkx 等相比,性能得到了提升。

而且,它还涵盖了可视化。从网站:

使用各种算法和输出格式(包括屏幕)方便地绘制图形。Graph-tool 有自己的布局算法和基于 cairo 和 GTK+ 的通用交互式绘图例程,但它也可以作为出色的 graphviz 包的非常舒适的界面。

这是文档中的一个简洁示例(还有更多):

政治博客网络的块分区

(政治博客网络的块分区)。

而且,它的代码:

>>> g = gt.collection.data["polblogs"]
>>> g = gt.GraphView(g, vfilt=gt.label_largest_component(gt.GraphView(g, directed=False)))
>>> state = gt.BlockState(g, B=g.num_vertices(), deg_corr=True)
>>> state = gt.multilevel_minimize(state, B=2)
>>> gt.graph_draw(g, pos=g.vp["pos"], vertex_fill_color=state.get_blocks(), output="polblogs_agg.pdf")
<...>

(注意:本例中每个节点的位置都是预先确定的,因此不必运行布局算法)

这是使用相同数据的另一个示例(结果令人难以置信): http ://ryancompton.net/2014/10/05/graph-tools-visualization-is-pretty-good/

于 2014-12-21T17:33:18.433 回答
12

最近这里发生了很多事情! Netwulf是一个库,致力于在 Python 中实现网络的简单可重现交互式可视化(免责声明:我是贡献者)。

图像

另请查看webweb,如果您想将网络导出为 html,这会更好。

于 2019-06-19T06:08:41.063 回答
3

另一种方法是Cytoscape。您也可以使用 gml 文件。

就像psychemedia 所说,您可以使用Networkx 绘制图表并导出到gml 文件。

nx.write_graphml(G,'my_file.gml')

之后,在 Cytoscape 中单击 From Network File 并选择您的 gml 文件。在那里,您也可以更改样式。

于 2014-08-11T14:24:11.740 回答