如何解决使用Plotly或mpl进行Networkx MultiDiGraph可视化?
我有一个nx.MultiDiGraph()
实例G
,如果我从nx
中写出一个点文件并使用dot
或其他GraphViz命令行工具将其可视化,效果很好。 / p>
# write .dot file from Python
nx.drawing.nx_agraph.write_dot(G,'graph.dot')
# from the command line
$ dot -Tpng graph.dot > graph.png'
产生以下可爱的图像:
我非常希望能够使用plotly
或matplotlib
复制这种图形,尤其是使得边缘可以悬停以显示一些标签。但是,我找不到关于如何MultiDiGraph
实现这一目标的任何文档。
我尝试了以下方法,这导致每对节点之间只有一个边缘标签。
import plotly.graph_objects as go
import networkx as nx
G = # the nx.MultiDiGraph()
pos = nx.spring_layout(G)
edge_x = []
edge_y = []
for edge in G.edges():
x0,y0 = pos[edge[0]]
x1,y1 = pos[edge[1]]
edge_x.append(x0)
edge_x.append(x1)
edge_x.append(None)
edge_y.append(y0)
edge_y.append(y1)
edge_y.append(None)
edge_trace = go.Scatter(
x=edge_x,y=edge_y,line=dict(width=0.5,color='#888'),hoverinfo='all',mode='lines')
node_x = []
node_y = []
for node in G.nodes():
x,y = pos[node]
node_x.append(x)
node_y.append(y)
node_trace = go.Scatter(
x=node_x,y=node_y,mode='markers',marker=dict(
showscale=True,colorscale='YlGnBu',reversescale=True,color=[],size=10,line_width=2))
fig_graph = go.Figure(data=[edge_trace,node_trace],layout=go.Layout(
titlefont_size=16,showlegend=False,hovermode='closest',margin=dict(b=20,l=5,r=5,t=40),xaxis=dict(showgrid=False,zeroline=False,showticklabels=False),yaxis=dict(showgrid=False,showticklabels=False))
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。