Task03 NetworkX安装与内置图的使用

464 阅读1分钟

NetworkX安装与内置图

#pip install numpy pandas matplotlib tqdm networkx

验证安装成功

import networkx as nx

nx.__version__
'3.0'

设置matplotlib中文

import matplotlib
import matplotlib.pyplot as plt

matplotlib.rc("font",family="SimHei") #中文字体
plt.rcParams['axes.unicode_minus']=False

plt.plot([1,2,3],[100,200,300])
plt.title("中文")
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.show()

output_5_0.png

经典图结构

全连接无向图

G=nx.complete_graph(7)
nx.draw(G)

output_7_0.png

# 全图连接数
G.size()
21

全连接有向图

G=nx.complete_graph(7,nx.DiGraph())
nx.draw(G)

output_10_0.png

# 判断是否有向图
G.is_directed()
True

环状图

G=nx.cycle_graph(5)
nx.draw(G)

output_13_0.png

梯状图

G=nx.ladder_graph(5)
nx.draw(G)

output_15_0.png

线性珠串图

G=nx.path_graph(15)
nx.draw(G)

output_17_0.png

星状图

G=nx.star_graph(7)
nx.draw(G)

output_19_0.png

轮辐图

G=nx.wheel_graph(8)
nx.draw(G)

output_21_0.png

二项树

G=nx.binomial_tree(5)
nx.draw(G)

output_23_0.png

格栅图

二维矩阵网格图

G=nx.grid_2d_graph(3,5)
nx.draw(G)

output_25_0.png

多维网格图

G=nx.grid_graph(dim=(2,3,4))
nx.draw(G)

output_27_0.png

二维三角形网格图

G=nx.triangular_lattice_graph(2,5) #二行五列
nx.draw(G)

output_29_0.png

二维六边形蜂窝图

G=nx.hexagonal_lattice_graph(2,3)
nx.draw(G)

output_31_0.png

N维超立方体图

G=nx.hypercube_graph(4)
nx.draw(G)

output_33_0.png

NetworkX 内置图

G=nx.diamond_graph() #钻石图
nx.draw(G)

output_35_0.png

G=nx.bull_graph() #牛角图
nx.draw(G)

output_36_0.png

G=nx.frucht_graph()
nx.draw(G)

output_37_0.png

G=nx.house_graph()
nx.draw(G)

output_38_0.png

G=nx.house_x_graph()
nx.draw(G)

output_39_0.png

G=nx.petersen_graph()
nx.draw(G)

output_40_0.png

G=nx.krackhardt_kite_graph() #风筝图
nx.draw(G)

output_41_0.png

随机图

G=nx.erdos_renyi_graph(10,0.5)
nx.draw(G)

output_43_0.png

有向图

无标度有向图

G=nx.scale_free_graph(100)
nx.draw(G)

output_45_0.png

社交网络

# 空手道俱乐部图
G=nx.karate_club_graph()
nx.draw(G,with_labels=True)# 每一个节点都是俱乐部的会员

output_47_0.png

G.nodes[5]["club"]
'Mr. Hi'
G.nodes[9]["club"]
'Officer'
# 雨果《悲惨世界》人物关系
G=nx.les_miserables_graph()
plt.figure(figsize=(12,10))
pos=nx.spring_layout(G,seed=10) #生成一个布局
nx.draw(G,pos,with_labels=True) # with_labels=True 标注几号节点或者名字

output_50_0.png

# 家庭谱系图
G=nx.florentine_families_graph()
nx.draw(G,with_labels=True)

output_51_0.png

# 社群聚类图
G=nx.caveman_graph(4,3)
nx.draw(G,with_labels=True)

output_52_0.png

#树
tree=nx.random_tree(n=10,seed=0)
print(nx.forest_str(tree,sources=[0]))
╙── 0
    ├── 3
    └── 4
        ├── 6
        │   ├── 1
        │   ├── 2
        │   └── 7
        │       └── 8
        │           └── 5
        └── 9