写在前面的话
She is compelling,spectral, fascinating, an unforgettably unique performer
在写NetworkX的时候我想起来一个梗,一个叫stromezhang的同学,忘了在哪里工作,负责Android的某个APP的开发,是那个项目的头头。很久以前看的,招聘,然后招聘的是iSO 的开发人员。然后把iOS 写成了IOS以及ios的同学的简历全部都挂了,对,挂了!按照他的说法,这是官方的说法,Android,以及android 着两个写法都是有的。但是iOS 这个,苹果公司开发的所有的东西,iPad,iPhone 都是小写。所以,按照这个哥们的说法,我们应该要尊重以及注意所有的细节。
呐,所以既然要对付各种挑剔的朋友,所以我决定严格按照官网上的写法NetworkX
今天,玩一下图。
NetworkX是用Python编写的
官网连接: http://networkx.readthedocs.io/en/networkx-1.10/#
1. 创建图
创建一个空图,没有节点没有边。
>>> import networkx as nx
>>> G=nx.Graph()
根据定义,图是一系列的点和对应的点对(可以叫做边,或者连接的几何等等)的集合。
在NetworkX 中,节点可以是任何可以Hash的对象,例如,一个文本字符串,一张图片,一个XML的对象,或者是另一个图,或者是一个定制的节点对象
2. 节点
增加一个节点
>>> G.add_node(1)
增加一系列的节点
>>> G.add_nodes_from([2,3])
或者是增加nbunch的节点。一个nbunch是任何可以迭代的节点的容器,不是一个图中的任何节点。 比如可以是 一个 list(列表),集合(set),一个图(graph),一个文件(file)等等。
>>> H=nx.path_graph(10)
>>> G.add_nodes_from(H)
我们可以得到的图如下面所示:
这个是把H这个里面的图的所有点当做每一个点来处理,当然我们可以把H这个里面的所有点当做一个点来处理。
>>> G.add_node(H)
3. 边
我们的图同样可以通过增加边来扩大。
我们一次增加一条边。
>>> G.add_edge(1,2)
>>> e=(2,3)
>>> G.add_edge(*e) # unpack edge tuple*
我们在增加了这两条边之后我们看看我们的图最后成了什么样子。
通过增加一系列的边
>>> G.add_edges_from([(1,2),(1,3)])
或者我们也可以增加任何ebranch 的边。一个ebunch 的边是任何的边的元组的可以迭代的容器。一个边的元组可以是两个节点的元组也可以是一个三元组,跟着一个边的属性。例如:(2,3,{‘weight’:3.1415}) 。边的属性我们将在下面详细讨论。
>>> G.add_edges_from(H.edges())
我们可以销毁一个图用下面的一些类似的方法:
Graph.remove_node()
Graph.remove_nodes_from()
Graph.remove_edge()
Graph.remove_edges_from()
我们来试一下效果:
首先我们先将H作为我们的一个点添加进去,然后我们删除这个点H
In [109]: G.add_node(H)
In [110]: nx.draw(G)
In [111]: plt.show()