我需要定义一个社交网络,并对其进行分析和绘制。我可以手工绘制并手动分析(计算各种指标),但我不想重复造轮子。
我已经尝试使用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')
这里有一个很棒的例子来自文档(还有很多很多):方便地绘制您的图形,使用各种算法和输出格式(包括屏幕)。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/
如果要将这些图形嵌入到HTML页面中,会有问题吗?是否可以返回
html或
div`? - NoobEditorfmt : 输出文件格式。可能的值包括 "auto", "ps", "pdf", "svg" 和 "png"。如果值为 "auto",则会从输出参数中猜测格式。
因此,只需将其命名为例如 .png,您就会得到一个 png 文件。然后下一步是将此图像包含在您的 HTML 中。 - keyser