我需要定义一个社交网络,分析它并绘制它。我既可以手动绘制它,也可以手动分析它(计算各种指标)。但我不想重新发明轮子。
我曾尝试使用 matplotlib,但我需要以交互方式使用它,并在几行中告诉它如何加载数据,然后调用渲染函数,它将图形渲染为 SVG。
如何以所述方式可视化社交网络?
我需要定义一个社交网络,分析它并绘制它。我既可以手动绘制它,也可以手动分析它(计算各种指标)。但我不想重新发明轮子。
我曾尝试使用 matplotlib,但我需要以交互方式使用它,并在几行中告诉它如何加载数据,然后调用渲染函数,它将图形渲染为 SVG。
如何以所述方式可视化社交网络?
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')
三个答案提到 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/
另一种方法是Cytoscape。您也可以使用 gml 文件。
就像psychemedia 所说,您可以使用Networkx 绘制图表并导出到gml 文件。
nx.write_graphml(G,'my_file.gml')
之后,在 Cytoscape 中单击 From Network File 并选择您的 gml 文件。在那里,您也可以更改样式。