networkx如何给节点和边上不同颜色,请给出示例代码
时间: 2024-02-06 20:08:50 浏览: 229
可以使用NetworkX中的`draw`函数来绘制节点和边,并通过`node_color`和`edge_color`参数来设置节点和边的颜色。
下面是一个简单的示例代码:
```python
import networkx as nx
import matplotlib.pyplot as plt
# 创建一个简单的图
G = nx.Graph()
G.add_nodes_from([1, 2, 3])
G.add_edges_from([(1, 2), (2, 3)])
# 设置节点和边的颜色
node_colors = ['red', 'green', 'blue']
edge_colors = ['black', 'gray']
# 绘制图形
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_color=node_colors, edge_color=edge_colors)
# 显示图形
plt.show()
```
在上面的示例中,我们创建了一个简单的图,其中有3个节点和2条边。然后,我们创建了两个列表,分别用于设置节点和边的颜色。最后,我们使用`nx.draw`函数绘制了图形,并将节点和边的颜色设置为上面定义的颜色。运行代码后,将会显示出一个带有不同颜色节点和边的图形。
相关问题
用python的networkx将边的多个属性用括号连接,显示在边上
可以使用 NetworkX 中的 `draw_networkx_edge_labels` 函数和 Python 的字符串格式化功能来将边的多个属性用括号连接并显示在边上。
以下是一个示例代码:
```python
import networkx as nx
import matplotlib.pyplot as plt
# 创建一个有向图
G = nx.DiGraph()
# 添加带有多个属性的边
G.add_edge('A', 'B', weight=4, label='edge1')
G.add_edge('B', 'C', weight=2, label='edge2')
G.add_edge('C', 'D', weight=3, label='edge3')
# 绘制网络图
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_color='lightblue', edge_color='gray', width=1, arrowstyle='->', arrowsize=15)
# 绘制边标签
labels = {(u, v): f"({d['weight']}, {d['label']})" for u, v, d in G.edges(data=True)}
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, font_size=12, font_color='red')
# 显示图形
plt.show()
```
在这个例子中,我们使用了一个字典推导式来创建边标签字典 `labels`。在这个字典中,每个键都是一个包含源节点、目标节点的元组,每个值都是一个字符串,其中包含了边的多个属性,并用括号括起来。这个字符串是使用 Python 的字符串格式化功能创建的,其中 `d['weight']` 和 `d['label']` 分别代表边的 `weight` 属性和 `label` 属性。
然后,我们使用 `draw_networkx_edge_labels` 函数将这些边标签绘制到边上。运行这段代码后,你会看到一个带有括号连接的边属性的网络图。
生成固定节点和固定边数的ba网络
Barabási–Albert (BA) 模型是一种用于生成无标度网络的算法。该模型在网络科学中非常流行,因为它能够生成具有幂律度数分布的网络。以下是使用 BA 模型生成固定节点和固定边数的网络的步骤:
1. 初始化网络:生成 m0 个节点并随机连接它们。
2. 添加节点:在每次迭代中,添加一个新节点,并将其连接到与之前节点的度数成正比的 m 条边上。这就是 BA 模型的核心思想——富者愈富。
3. 重复步骤 2 直到网络达到所需的节点数。
下面是 Python 代码示例:
```python
import networkx as nx
import random
# 设置参数
n = 100 # 节点数
m = 3 # 每个新节点要连接的边数
m0 = 5 # 初始节点数
# 初始化网络
G = nx.complete_graph(m0)
# 添加节点
for i in range(m0, n):
# 计算每个节点的度数
degrees = [G.degree(j) for j in range(i)]
# 计算度数分布的概率
probabilities = [degree / sum(degrees) for degree in degrees]
# 选择 m 条边
targets = random.choices(range(i), weights=probabilities, k=m)
# 添加新节点并连接
G.add_node(i)
for target in targets:
G.add_edge(i, target)
# 打印节点度数分布
print(dict(G.degree()).values())
```
该代码将生成包含 100 个节点和 297 条边的 BA 网络,并输出节点度数分布。您可以根据需要修改参数来生成不同大小的网络。
阅读全文