networkx关系图 教程

以下为python2中

# =================创建一个图
import networkx as nx
g = nx.Graph()
g.clear()       #将图上元素清空

G = nx.Graph() # 创建无向图
G = nx.DiGraph() # 创建有向图
G = nx.MultiGraph() # 创建多重无向图
G = nx.MultiDigraph() # 创建多重有向图

# =================节点
#1 添加一个节点
g.add_node(1)
g.add_node("a")
g.add_node("spam")

#2 添加一组节点
g.add_nodes_from([2,3])
 # or 
a = [2,3]
g.add_nodes_from(a)

#3 
g.add_node("spam")  #添加了一个名为spam的节点
g.add_nodes_from("spam")  #添加了4个节点,名为s,p,a,m
g.nodes()   #可以将以上5个节点打印出来看看

#4 加一组从0开始的连续数字的节点
H = nx.path_graph(10)
g.add_nodes_from(H) #将0~9加入了节点
                  
#5 删除节点
g.remove_node(node_name)
g.remove_nodes_from(nodes_list)

# ====================边
#1 加一条边
g.add_edge(1,2)
e = (2,3)
g.add_edge(*e) #直接g.add_edge(e)数据类型不对,*是将元组中的元素取出

#2 加一组边
g.add_edges_from([(1,2),(1,3)])
g.add_edges_from([("a","spam") , ("a",2)])

#3 通过nx.path_graph(n)加一系列连续的边
n = 10
H = nx.path_graph(n)
g.add_edges_from(H.edges()) #添加了0~1,1~2 ... n-2~n-1这样的n-1条连续的边

#4 删除边
g.remove_edge(edge)
g.remove_edges_from(edges_list)

#======================查看图上点和边的信息
g.number_of_nodes() #查看点的数量
g.number_of_edges() #查看边的数量
g.nodes() #返回所有点的信息(list)
g.edges() #返回所有边的信息(list中每个元素是一个tuple)
g.neighbors(1) #所有与1这个点相连的点的信息以列表的形式返回
g[1] #查看所有与1相连的边的属性,格式输出:{0: {}, 2: {}} 表示1和0相连的边没有设置任何属性(也就是{}没有信息),同理1和2相连的边也没有任何属性

#========================图的属性设置
#1 为图赋予初始属性
g = nx.Graph(day="Monday") 
g.graph # {'day': 'Monday'}

#2 修改图的属性
g.graph['day'] = 'Tuesday'
g.graph # {'day': 'Tuesday'}

# =========================点的属性设置
g.add_node('benz', money=10000, fuel="1.5L")
print g.node['benz'] # {'fuel': '1.5L', 'money': 10000}
print g.node['benz']['money'] # 10000
print g.nodes(data=True) # data默认false就是不输出属性信息,修改为true,会将节点名字和属性信息一起输出

#=============================边的属性设置
g.clear()
n = 10
H = nx.path_graph(n)
g.add_nodes_from(H)
g.add_edges_from(H.edges())
g[1][2]['color'] = 'blue'

g.add_edge(1, 2, weight=4.7)
g.add_edges_from([(3,4),(4,5)], color='red')
g.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])
g[1][2]['weight'] = 4.7
g.edge[1][2]['weight'] = 4

#===================不同类型的图(有向图Directed graphs , 重边图 Multigraphs)
# Directed graphs
DG = nx.DiGraph()
DG.add_weighted_edges_from([(1,2,0.5), (3,1,0.75), (1,4,0.3)]) # 添加带权值的边
print DG.out_degree(1) # 打印结果:2 表示:找到1的出度
print DG.out_degree(1, weight='weight') # 打印结果:0.8 表示:从1出去的边的权值和,这里权值是以weight属性值作为标准,如果你有一个money属性,那么也可以修改为weight='money',那么结果就是对money求和了
print DG.successors(1) # [2,4] 表示1的后继节点有2和4
print DG.predecessors(1) # [3] 表示只有一个节点3有指向1的连边

# Multigraphs
MG=nx.MultiGraph()
MG.add_weighted_edges_from([(1,2,.5), (1,2,.75), (2,3,.5)])
print MG.degree(weight='weight') # {1: 1.25, 2: 1.75, 3: 0.5}
GG=nx.Graph()
for n,nbrs in MG.adjacency_iter():
    for nbr,edict in nbrs.items():
        minvalue=min([d['weight'] for d in edict.values()])
        GG.add_edge(n,nbr, weight = minvalue)

print nx.shortest_path(GG,1,3) # [1, 2, 3]

#=============================图的绘制
# 4种图的构造方法
nx.draw(g)
nx.draw_random(g) #点随机分布
nx.draw_circular(g) #点的分布形成一个环
nx.draw_spectral(g)

# 将图形表现出来
import matplotlib.pyplot as plt
plt.show()

# 将图片保存到下来
nx.draw(g)
plt.savefig("path.png")   # 和图片一起运行才能保存

# 修改节点颜色,边的颜色
g = nx.cubical_graph()
nx.draw(g, pos=nx.spectral_layout(g), nodecolor='r', edge_color='b')
plt.show()



# 例子
import matplotlib.pyplot as plt

a=[1,1,1,1,1,1,1,1,1,1]
b=[11,22,33,44,55,234,56,88,90,98]
c=[111,111,1111,122,122,122,134,1234,12424,222]
g.add_edges_from(zip(b,a))
g.add_edges_from(zip(b,c))
nx.draw(g)
plt.show()

# 例子
#添加节点
import networkx as nx
import matplotlib.pyplot as plt
 
G = nx.Graph()                 #建立一个空的无向图G
G.add_node('a')                  #添加一个节点1
G.add_nodes_from(['b','c','d','e'])    #加点集合
G.add_cycle(['f','g','h','j'])         #加环
H = nx.path_graph(10)          #返回由10个节点挨个连接的无向图,所以有9条边
G.add_nodes_from(H)            #创建一个子图H加入G
G.add_node(H)                  #直接将图作为节点

nx.draw(G, with_labels=True)
plt.show()

# 例子
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_edges_from([('n', 'n1'), ('n', 'n2'), ('n', 'n3')])
G.add_edges_from([('n4', 'n41'), ('n1', 'n11'), ('n1', 'n12'), ('n1', 'n13')])
G.add_edges_from([('n2', 'n21'), ('n2', 'n22')])
G.add_edges_from([('n13', 'n131'), ('n22', 'n221')])
G.add_edges_from([('n131', 'n221'), ('n221', 'n131')])
G.add_node('n5')
nx.draw(G, with_labels=True)
plt.show()

plt保存图片要和生成句一起运行才有用

本文:

https://www.jianshu.com/p/e543dc63454f

参数:

https://blog.csdn.net/sinat_26917383/article/details/78963590

https://www.cnblogs.com/rnanprince/p/10816771.html

循环启发:

https://www.jb51.net/article/127386.htm

你可能感兴趣的:(方法总结)