近期参加了美赛,队伍选择的题目是跟网络建立有关,因为要呈现网络建立的结果,所以现学了很多画网络图的语句,现在整理如下:
一、图的四种类型
- Graph:无向图,不包含重边,
- MultiGraph:无向图,可含有重边
- DiGraph:有向图,不含重边
- MultiDiGraph:有向图,可含重边
二、nx.draw()
的用法(设置网络图的形式)
详见nx.draw()的各类参数
2.1图中的样式参数
node_size
: 指定节点的尺寸大小(默认是300)
node_color
: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如’r’为红色,'b’为绿色等)
node_shape
: 节点的形状(默认是圆形,用字符串’o’标识)
alpha
: 透明度 (默认是1.0,不透明,0为完全透明)
width
: 边的宽度 (默认为1.0)
edge_color
: 边的颜色(默认为黑色)
style
: 边的样式(默认为实现,可选: solid|dashed|dotted,dashdot)
with_labels
: 节点是否带标签(默认为True)
font_size
: 节点标签字体大小 (默认为12)
font_color
: 节点标签字体颜色(默认为黑色)
2.2图中节点的摆放位置
circular_layout
:节点在一个圆环上均匀分布
random_layout
:节点随机分布
shell_layout
:节点在同心圆上分布
spring_layout
: 用Fruchterman-Reingold算法排列节点(样子类似多中心放射状)
spectral_layout
:根据图的拉普拉斯特征向量排列节点
三、各类图的创建(不带权重)
3.1. 无向图:Graph
#step1:创建空图
import networkx as nx
G=nx.Graph() #创建什么都没有的空图,图的名称为G
#step2:给上述空图加边
G.add_edges_from([(1,2)]) #此处只增加一条边,边的起点名是1,终点名是2
nx.draw(G,with_labels=True)
#nx.draw()是画图的语句,with_labels=True 的意思是把节点名显示在图中
import matplotlib.pyplot as plt #画图以及图片展示的包以及语句
plt.show()
当然,我们要使用这个软件肯定是要导入好多边和节点,下面我们多添加几条边
import networkx as nx
G=nx.Graph() #创建什么都没有的空图,图的名称为G
G.add_edges_from([(1,2),(2,3),(3,4),(4,5)])
#(边的起点,边的终点)
nx.draw(G,with_labels=True)
import matplotlib.pyplot as plt
plt.show()
下面用列表的方式给图加边
#step1:创建空图
import networkx as nx
G=nx.Graph() #创建什么都没有的空图
#step2:给上述空图加边
start=[1