12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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: <a href='https://plotly.com/'> Plotly</a>",
- 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()
|