import networkx as nx import plotly.graph_objects as go # 创建一个空的Graph G = nx.DiGraph() # 添加节点和边 G.add_edge('A', 'B', weight=1) G.add_edge('A', 'C', weight=2) G.add_edge('B', 'C', weight=3) G.add_edge('C', 'D', weight=4) # 使用spring布局获取节点位置 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) # None 表示断开,用于绘制多条线段 edge_y.append(y0) edge_y.append(y1) edge_y.append(None) # 创建节点数据 node_x = [pos[node][0] for node in G.nodes()] node_y = [pos[node][1] for node in G.nodes()] # 创建节点和边轨迹 edge_trace = go.Scatter( x=edge_x, y=edge_y, line=dict(width=0.5, color='black'), hoverinfo='none', mode='lines') node_trace = go.Scatter( x=node_x, y=node_y, text=[], mode='markers', hoverinfo='text', marker=dict( showscale=True, # colorscale options #'Greys' | 'YlGnBu' | 'Greens' | 'YlOrRd' | 'Bluered' | 'RdBu' | #'Reds' | 'Blues' | 'Picnic' | 'Rainbow' | 'Portland' | 'Jet' | #'Hot' | 'Blackbody' | 'Earth' | 'Electric' | 'Viridis' | colorscale='YlGnBu', reversescale=True, color=[], size=10, colorbar=dict( thickness=15, title='Node Connections', xanchor='left', titleside='right' ), line_width=2)) # 更新节点颜色和大小 node_adjacencies = [] node_text = [] for node, adjacencies in enumerate(G.adjacency()): node_adjacencies.append(len(adjacencies[1])) node_text.append('# of connections: '+str(len(adjacencies[1]))) node_trace.marker.color = node_adjacencies node_trace.text = node_text # 创建图布局 fig = go.Figure(data=[edge_trace, node_trace], layout=go.Layout( title='Interactive Network Graph', titlefont_size=16, showlegend=False, hovermode='closest', margin=dict(b=20,l=5,r=5,t=40), annotations=[ dict( text="Python code: Plotly", showarrow=False, xref="paper", yref="paper", x=0.005, y=-0.002 ) ], xaxis=dict(showgrid=False, zeroline=False, showticklabels=False), yaxis=dict(showgrid=False, zeroline=False, showticklabels=False)) ) # 显示图形 fig.show()