import pandas as pd import networkx as nx import matplotlib.pyplot as plt df = pd.read_excel(r"C:\Users\li'yi'jie\Desktop\运筹学网络规划数据.xlsx") edges = [] for i in range(len(df)): edge = { "id": df.loc[i, "边的编号"], "tail": df.loc[i, "边的尾节点"], "head": df.loc[i, "边的头节点"], "length": df.loc[i, "长度"], "capacity": df.loc[i, "容量"] } edges.append(edge) G = nx.DiGraph() for edge in edges: G.add_edge(edge["tail"], edge["head"], weight=edge["length"]) all_pairs = dict(nx.all_pairs_dijkstra_path_length(G)) pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True) labels = nx.get_edge_attributes(G, "长度") nx.draw_networkx_edge_labels(G, pos, edge_labels=labels) plt.show()如何修改使生成的网络图的边旁标注权重?
时间: 2024-01-02 07:03:03 浏览: 30
可以在代码最后添加以下语句:
```
labels = nx.get_edge_attributes(G, "weight")
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
plt.show()
```
其中 `labels` 变量用于获取图 G 中所有边的权重信息,`nx.draw_networkx_edge_labels()` 函数用于在图形中绘制边旁的权重标签。最后使用 `plt.show()` 函数显示图形即可。
相关问题
代码解读,import networkx as nx import pandas as pd import matplotlib.pyplot as plt import numpy as np import scipy as sp
这段代码是Python中导入几个常用的数据分析和可视化库。具体解释如下:
- `import networkx as nx`:导入 `networkx` 库,它是一个用于复杂网络分析的Python库,可以方便地创建、操作和可视化各种类型的网络结构。
- `import pandas as pd`:导入 `pandas` 库,并将其命名为 `pd`,它是一个用于数据处理和分析的Python库,可以方便地读取、操作和处理各种格式的数据,如CSV、Excel、SQL等。
- `import matplotlib.pyplot as plt`:导入 `matplotlib` 库,并将其子模块 `pyplot` 命名为 `plt`,它是一个用于绘制各种类型图表的Python库,包括线图、散点图、柱状图等。
- `import numpy as np`:导入 `numpy` 库,并将其命名为 `np`,它是一个用于科学计算的Python库,可以方便地进行数值计算、数组操作和线性代数运算等。
- `import scipy as sp`:导入 `scipy` 库,并将其命名为 `sp`,它是一个用于科学计算和数据分析的Python库,包括线性代数、数值计算、优化、统计分析等。
这些库都是Python数据分析和可视化领域的常用工具,可以帮助我们进行各种类型的数据处理和分析,并将结果可视化。
import pandas as pd import networkx as nx import matplotlib.pyplot as plt df = pd.read_excel(r"C:\Users\li'yi'jie\Desktop\运筹学网络规划数据.xlsx") edges = [] for i in range(len(df)): edge = { "id": df.loc[i, "边的编号"], "tail": df.loc[i, "边的尾节点"], "head": df.loc[i, "边的头节点"], "length": df.loc[i, "长度"], "capacity": df.loc[i, "容量"] } edges.append(edge) plt.figure(figsize=(10,8)) G = nx.DiGraph() for edge in edges: G.add_edge(edge["tail"], edge["head"], weight=edge["length"]) all_pairs = dict(nx.all_pairs_dijkstra_path_length(G)) pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True) labels = nx.get_edge_attributes(G, "weight") nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, label_pos=0.3) plt.show()如何让生成的有向图两只箭头分开
可以使用 `nx.draw_networkx_edge_labels()` 函数的 `label_pos` 和 `font_size` 参数来调整边权重标签的位置和大小,从而避免标签与箭头重叠。同时,可以使用 `nx.draw_networkx_edges()` 函数的 `arrowsize` 参数来调整箭头大小。修改后的代码如下所示:
```
import pandas as pd import networkx as nx import matplotlib.pyplot as plt df = pd.read_excel(r"C:\Users\li'yi'jie\Desktop\运筹学网络规划数据.xlsx") edges = [] for i in range(len(df)): edge = { "id": df.loc[i, "边的编号"], "tail": df.loc[i, "边的尾节点"], "head": df.loc[i, "边的头节点"], "length": df.loc[i, "长度"], "capacity": df.loc[i, "容量"] } edges.append(edge) plt.figure(figsize=(10,8)) G = nx.DiGraph() for edge in edges: G.add_edge(edge["tail"], edge["head"], weight=edge["length"]) all_pairs = dict(nx.all_pairs_dijkstra_path_length(G)) pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True, arrowsize=20) labels = nx.get_edge_attributes(G, "weight") nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, label_pos=0.3, font_size=12) plt.show()
```
运行后可以看到箭头和边权重标签已经分开,且箭头大小也被调整为了 20。您可以适当调整 `arrowsize` 参数的值,以达到最佳效果。