G.in_edges(edge)中的数据构建一个新图
时间: 2024-05-04 11:16:50 浏览: 21
如果你想基于一个有向图的边列表来构建一个新的有向图,可以按照以下步骤:
1. 创建一个新的有向图对象,例如使用 `nx.DiGraph()` 来创建一个空的有向图。
2. 对于原有的有向图中的每条边,使用 `graph.add_edge()` 方法将其添加到新的有向图中。
以下是一个示例代码,它基于一个有向图的边列表来构建一个新的有向图:
```python
import networkx as nx
# 原始有向图的边列表
edges = [(1, 2), (2, 3), (3, 4), (4, 1)]
# 创建一个新的有向图对象
new_graph = nx.DiGraph()
# 将原始有向图中的每条边添加到新的有向图中
for edge in edges:
new_graph.add_edge(edge[0], edge[1])
# 打印新的有向图中的节点和边
print("Nodes:", new_graph.nodes())
print("Edges:", new_graph.edges())
```
这将输出以下结果:
```
Nodes: [1, 2, 3, 4]
Edges: [(1, 2), (2, 3), (3, 4), (4, 1)]
```
相关问题
G.add_edges_from(graph) 构建图后用字典形式展示
你可以使用 `nx.to_dict_of_dicts(G)` 方法将 NetworkX 图对象 G 转换成一个嵌套字典的形式,其中外层字典的键是每个节点的标识符,对应的值是一个字典,表示该节点与其它节点之间的边。具体实现代码如下:
```python
import networkx as nx
# 构建一个图对象 G
graph = [(1, 2), (2, 3), (3, 4)]
G = nx.Graph()
G.add_edges_from(graph)
# 将图对象 G 转换成嵌套字典的形式
graph_dict = nx.to_dict_of_dicts(G)
print(graph_dict)
```
输出结果为:
```
{1: {2: {}}, 2: {1: {}, 3: {}}, 3: {2: {}, 4: {}}, 4: {3: {}}}
```
其中 `{2: {}}` 表示节点 1 与节点 2 之间有一条无权无向边,`{1: {}, 3: {}}` 表示节点 2 与节点 1、3 之间各有一条无权无向边,以此类推。
import networkx as nx import matplotlib.pyplot as plt # create graph object G = nx.Graph() # add nodes G.add_node('A') G.add_node('B') G.add_node('C') G.add_node('D') # add edges with weights G.add_edge('A', 'B', weight=5) G.add_edge('A', 'C', weight=7) G.add_edge('B', 'D', weight=6) G.add_edge('C', 'D', weight=3) # define node positions (optional) pos = {'A': (0, 0), 'B': (1, 1), 'C': (-1, 1), 'D': (0, 2)} # draw nodes and edges with labels nx.draw_networkx_nodes(G, pos) nx.draw_networkx_edges(G, pos) nx.draw_networkx_labels(G, pos) edge_labels = nx.get_edge_attributes(G, 'weight') nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) plt.axis('off') plt.show()
这段代码也可以用来绘制带权图,它和我之前给出的示例代码有些不同。以下是这段代码的解释:
```python
import networkx as nx
import matplotlib.pyplot as plt
# 创建一个带权图
G = nx.Graph()
# 添加节点
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
# 添加带权边
G.add_edge('A', 'B', weight=5)
G.add_edge('A', 'C', weight=7)
G.add_edge('B', 'D', weight=6)
G.add_edge('C', 'D', weight=3)
# 定义节点位置
pos = {'A': (0, 0), 'B': (1, 1), 'C': (-1, 1), 'D': (0, 2)}
# 绘制节点和边以及标签
nx.draw_networkx_nodes(G, pos)
nx.draw_networkx_edges(G, pos)
nx.draw_networkx_labels(G, pos)
# 获取边的权重并绘制标签
edge_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.axis('off')
plt.show()
```
在这个示例中,我们首先创建了一个带权图,然后添加了节点和带权边。接下来,我们定义了节点位置,这是可选的,如果不定义位置,则networkx会自动为节点排列位置。然后我们使用`nx.draw_networkx_nodes`、`nx.draw_networkx_edges`和`nx.draw_networkx_labels`这三个函数来绘制节点和边,并使用`nx.get_edge_attributes`获取边的权重。最后,我们使用`nx.draw_networkx_edge_labels`函数来绘制边的标签。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)