上述代码,增加 显示边属性 的代码
时间: 2023-07-02 21:10:08 浏览: 38
假设你想要显示边的权重,可以在 `draw_graph` 函数中增加以下代码:
```python
for node1, node2, data in G.edges(data=True):
edge_label = data['weight']
pos1 = pos[node1]
pos2 = pos[node2]
edge_x, edge_y = zip(pos1, pos2)
ax.plot(edge_x, edge_y, linewidth=2, alpha=0.3, color='black')
ax.text((pos1[0] + pos2[0]) / 2, (pos1[1] + pos2[1]) / 2, s=edge_label, fontweight='bold', fontsize=10, color='red')
```
完整的代码如下:
```python
import random
import networkx as nx
import matplotlib.pyplot as plt
def generate_random_graph(num_nodes, num_edges):
G = nx.Graph()
nodes = range(num_nodes)
edges = []
while len(edges) < num_edges:
node1, node2 = random.sample(nodes, 2)
weight = random.randint(1, 10)
edges.append((node1, node2, weight))
G.add_weighted_edges_from(edges)
return G
def draw_graph(G):
pos = nx.spring_layout(G)
fig, ax = plt.subplots(figsize=(8, 6))
nx.draw_networkx_nodes(G, pos, ax=ax, node_size=500, node_color='lightblue', alpha=0.8)
nx.draw_networkx_labels(G, pos, ax=ax, font_size=16, font_color='black')
for node1, node2, data in G.edges(data=True):
edge_label = data['weight']
pos1 = pos[node1]
pos2 = pos[node2]
edge_x, edge_y = zip(pos1, pos2)
ax.plot(edge_x, edge_y, linewidth=2, alpha=0.3, color='black')
ax.text((pos1[0] + pos2[0]) / 2, (pos1[1] + pos2[1]) / 2, s=edge_label, fontweight='bold', fontsize=10, color='red')
plt.axis('off')
plt.show()
G = generate_random_graph(10, 15)
draw_graph(G)
```
这样,每条边的权重就会显示在边的中间位置。你可以根据需要修改字体颜色、大小等属性。