目录
1基础
首先是包的导入
import networkx as nx
以下基本图形类型作为Python类提供:
图形:此类实现无向图。它忽略两个节点之间的多个边。它确实允许节点与其自身之间的自环边缘。
图:有向图,即有向边的图。有向图(图的子类)共有的操作。
多图:灵活的图类,允许在成对的节点之间存在多个无向边。附加的灵活性会导致性能降低,尽管通常并不明显。
多图:MultiGraph的有向版本。
G=nx.Graph() # 无向图
G=nx.DiGraph() # 有向图
G=nx.MultiGraph() # 多图
G=nx.MultiDiGraph()# 多图有向
所有图类均允许任何可哈希对象作为节点。可哈希对象包括字符串,元组,整数等。诸如权重和标签之类的任意边缘属性都可以与边缘相关联。
2节点和边
指定图形时,您必须做的下一个选择是使用哪种类型的节点和边。
如果您只关心网络的拓扑,则可以使用整数或字符串作为节点,并且您不必担心边缘数据。如果您已经有一个描述节点的数据结构,您可以简单地使用该结构作为节点,只要它是可哈希的即可。如果不可散列,则可以使用唯一标识符表示节点,并将数据分配为节点属性。
边缘通常具有与之关联的数据。任意数据可以与边关联作为边属性。如果数据是数字并且目的是表示加权图,则对属性使用“ weight”关键字。一些图算法,例如Dijkstra的最短路径算法,使用此属性名称来获取每个边的权重。
添加边时,可以使用关键字/值对将其他属性分配给边。您可以使用除’weight’以外的任何关键字来命名属性,然后可以通过该属性关键字轻松查询边缘数据。
一旦决定了如何对节点和边进行编码,以及是否具有带或不带多边的无向/有向图,就可以构建网络了。
3图创建
可以通过以下三种方式之一创建NetworkX图形对象:
图生成器–创建网络拓扑的标准算法。
- 从预先存在的(通常是文件)源中导入数据。
- 显式添加边缘和节点。
- 显式添加和删除节点/边缘最容易描述。每个图对象都提供了操作图的方法
import networkx as nx
G=nx.Graph()
G.add_edge(1,2) # 默认边缘数据为1
G.add_edge(2,3,weight=0.9) # 指定边缘数据
边缘属性可以是任何东西:
import math
G.add_edge('y','x',function=math.cos)
G.add_node(math.cos) # 任何可哈希可以是一个节点
您可以一次添加许多边:
elist=[('a','b',5.0),('b','c',3.0),('a','c',1.0),('c','d',7.3)]
G.add_weighted_edges_from(elist)
test
import networkx as nx
G=nx.Graph()
# 添加节点
G.add_node(1) # 添加节点可以添加一个节点,后来发现,无论数字填几,都是只出现一个点
G.add_nodes_from([4,2,3]) # 添加节点也可以添加列表
H=nx.path_graph(10) #添加任何nbunch节点,nbunch是节点的任何可迭代容器,它本身不是图中的节点。(如列表、集合、图表、文件等)
G.add_nodes_from(H) #G现在包含H的节点作为G的节点,相反,也可以将图H用作G中的节点。G.add_node(H)
# 添加连线
G.add_edge(1,2) #通过一次添加一条边来生长G
e=(2,3)
G.add_edge(*e) # 打开边缘元组*
G.add_edges_from([(1,2),(1,3)]) #通过添加边列表来生长G
G.add_edges_from(H.edges()) #添加任何nbunch边
# 移除边或点
G.remove_node(1)
G.remove_nodes_from(H)
G.remove_edge()
G.remove_edges_from()
nx.draw(G) # 绘图
G.number_of_nodes() #查询节点数
G.number_of_edges() #查询边数
G.nodes() # 查询节点
G.edges() #查询边
G.neighbors(1) # 查询1的邻近
当然,你也可以通过G.clear()
来清理图中的内容
import networkx as nx
G=nx.Graph()
# 增加节点
G.add_node(1)
G.