networkx画图节点大小不同,network使用方法

  networkx画图节点大小不同,network使用方法

  这几天在用networkx,官方文档就是这个,非常完整详细。在这里,我简单记录一些简单的用法和使用过程中对菜品和鸡的看法。

  这篇文章主要记住了如何创建networkx的基本图,以及如何绘制。

  环境

  Python 3.6.3

  网络x 2.4

  matplotlib 2.1.0

  图的创建本文主要介绍networkx中定义的图结构,并以无向图的使用为例。

  

图的类型

  networkx中规定了四种图:无向图、有向图、多重无向图、多重有向图,都允许自循环。

  差异:

  名称:有向多边图,无向,无向,无向,无向。在我的实验中使用了多图类型,所以这里简单介绍一下无向图Graph的用法。

  在networkx中,图的点和边是xxView的结构,有时需要转换后才能直接读取(具体是什么我不知道,看起来像字典,我就是这么理解的)

  

新建无向图

  导入网络x#创建一个新的空无向图GG=nx。图表()

加入节点

  #一次添加一个节点G.add_node(0)#添加节点G.add_nodes_from([1,2])#从另一个图合并H. path_graph(n)表示生成n个节点的路径图H=nx.path _ graph (10) G. Add _ nodes。

  

加入边

  #一次添加一条边G.add_edge(1,2)#从列表中添加边,并注意括号G. Add _ edges _ from ([(1,2),(2,3)])# Merge g . Add _ edges _ from(h . edges)010-从另一个图h。

  G.remove _ node(1)g . remove _ nodes _ from([2,3]) g. remove _ edge (5,6) g. remove _ edges _ from ([(7,8),(8,9)])删除点边的操作类似于添加点边的操作。应该注意的是

  

删除

  #看有没有一点1G.has_node(1)#看有没有边(1,2)G.has_edge(1,2)#查看点数G.order()G.number_of_nodes()#查看所有点列表(G.nodes())#查看所有边列表(G.edges())#查看图中点1的度数查看点1的邻居节点列表(G.adj[1])列表(G[1])另一种寻找邻居节点的方法是返回一个迭代器。返回格式为:(当前节点,{邻居节点:{属性}},通常在后面有循环时使用。

  #邻居节点nb=g .邻居(1)对于nb中的I:print(I)#邻居节点nb _ all=g .邻接()对于nb _ all中的I:print(I)

查看图

  添加图表的属性

  #引用官方文档示例#新建一个图,添加属性G=nx。Graph(day=Friday)#将属性G.graph[day]=Monday 添加到现有图形中,以添加点的属性。

  #创建新点时添加权重g.add _ node (1,weight= 10 )#向现有点添加权重G.nodes[1][[weight]=10以添加边的属性。

  #我们假设权重g.add _ edge (1,2,Weight= 10 )g . add _ edges _ from([(1,2,{weight: 10}),(2,3,{ Weight :15 })])g . add _ Weight= 10 )g[1][2][ Weight ]=10g。edges [1,2] [weight]=10。前三个是在添加边时添加权重,后两个是在现有边上添加权重。使用它们时没有区别。当然,除了重量,还可以加入其他属性,比如颜色、距离等。上述属性可以是任何数据类型。

  这大概就是无向图的基本内容。

  

添加属性

  与无向图相比,有向图多了一个方向,而且在边的存储上有前任和继任者的区别。所以入度和出度也可以用G.in_degree(n)和G.out_degree(n)来查询,G.degree(n)是两者之和。

  而对于一个有向图DG,可以通过dg.to _ unexpired()和nx把它变成一个无向图。图表(DG)。

  #创建一个空的有向图dgdg=nx.digraph () #按照无向图的方式添加#添加边时注意方向DG . Add _ node(0)DG . Add _ nodes _ from([1,2])h=NX . path _ graph(10)DG . Add _ nodes _ from。

  我还没用过。坑被占了再填,(咕咕咕

  

有向图——DiGraph

  (咕咕咕。

  画一张图。创建图表后,您可以开始绘图。

  首先,引导一个包,然后生成一个图形:

  将matplotlib.pyplot作为工厂编号导入生成一个g(名词,名词)图,表示n个点,两个点之间是否连接互相独立,并且概率为pG=nx.fast_gnp_random_graph(10,0.5)首先直接画图:

  nx.draw(G)plt.show()画出来的图长这样:

  如果觉得点这样分布不好看,可以用刷卡机这个位置参数来调整,位置是一个二维数组,每组数据对应一个点的坐标。

  网络x里自带的常用分布有:

  circular_layout(G[,scale,center,dim]):点分布在一个圆上

  random_layout(G[,中心,尺寸,种子]):随机分布

  rescale_layout(pos[,scale]):重新在(-刻度,刻度)范围内分布

  shell_layout(G[,nlist,scale,center,dim]):同心圆上分布

  spring_layout(G[,k,pos,fixed,]):使用弗鲁特曼-莱因戈尔德力定向算法定位节点。(不知道什么算法求得的分布,故放上原文)

  光谱布局(G[,重量,刻度,中心,尺寸]):用拉普拉斯矩阵的特征向量分布

  比如下面是用自带的圆形布局画出来的图:

  pos=NX。圆形布局(G)NX。draw(G,pos,with_labels=True,node_color=pink ,node_size=200)plt.show()这里稍微设置了一下标号显示、点的颜色和大小。

  

多重无向图——MutiGraph

  有时候我们画一个图,比如在着色问题中想规定一些不同的结点颜色,每次只想画这个图中的部分结点或者部分边,这种时候,就需要用到下面的方法了:

  # 画点draw_networkx_nodes(G,pos,nodelist=None,node_size=300,node_color=#1f78b4 ,node_shape=o ,alpha=None,cmap=None,vmin=None,vmax=None,ax=None,linewidths=None,edgecolors=None,label=None,**kwds)#画边draw_networkx_edges(G,pos,edgelist=None,width=1.0,edge_color=k ,style=solid ,alpha=None,arrowstyle=- ,arrowsize=10,edge_cmap=None,edge_vmin=None,edge_vmax=None,ax=None,arrows=True,label=None,node_size=300,nodelist=None,node_shape=o ,connectionstyle=None,min_source_margin=0,min_target_margin=0,*标签draw_networkx_labels(G,pos,labels=None,font_size=12,font_color=k ,font_family=sans-serif ,font_weight=normal ,alpha=None,bbox=None,ax=None,**kwds)#边的标签draw_networkx_edge_labels(G,pos,edge_labels=None,label_pos=0.5,font_size=10,font_color=k ,font_family=sans-serif ,font_weight=normal ,alpha=None,bbox=None,ax=None,rotate=True,**kwds)这些里面一定要有的参数是G和位置,阿尔法是透明度,cmap是颜色映射,其他的按需画图就行。

  先写到这里8,例子下次再加(咕咕咕

networkx画图节点大小不同,network使用方法