精华内容
下载资源
问答
  • 论文研究-网络无图节点编号的代数算法.pdf, 网络图是推广应用网络计划技术的关键。本文根据网络图与代数表达的关系和网络图本身的特点,在事先没有绘制出网络图的条件下,建立了一个准确无误地确定网络各节点编号的...
  • 在研究网络的鲁棒性的时候,我们往往会通过随机与蓄意攻击网络节点,观察网络效率的下降来进行后续研究。 代码如下: 函数Demo:testEglob(命名随意,只要与函数内的定义一致即可) 函数作用:计算当前网络网络...

    更新:

    有同学反馈说网络效率的函数可能有点问题。可以试试这个网路效率函数,对应的部分改一下就可以了。

    还有最大连通子图比例函数最大连通子图函数

    欢迎大家加入复杂网络交流群
    如果二维码过期,请私信我。

    原文

    在研究复杂网络的鲁棒性的时候,我们往往会通过随机与蓄意攻击网络节点,观察网络指标的下降比例,或者说是变化来进行网络特性的研究。

    常见的指标有:最大连通子图比例、网络效率、平均距离等等。
    这三个指标是不同的,但是实现随机攻击与蓄意攻击的原理是相同的,这里以按照节点度攻击的网络效率变化为例(其他两个指标就是函数不同,想按照其他节点重要度排序指标,也是类似的,只需要按照想要的排序方法得出节点的排序即可)。

    就是按照节点的重要性排序,通过循环来删除节点。把临界矩阵中节点对应的行和列先置0,然后再删除。每删除一次节点,就生成了一个新的邻接矩阵,然后每一次都通过testEglob函数计算出当前的网络效率值。

    首先需要准备的数据如下:

    ​ 网络的邻接矩阵,节点度的排序(从大到小排名,度大的排名靠前)。

    节点度的排名要按照节点的编号排序,下图是一个简单的例子,建议先在Excel中排列好了,然后再复制到Matlab中转置一下保存为mat文件就可以了。

    例子
    明白了蓄意攻击的原理,那么随机攻击的原理也比较好理解了,蓄意攻击是按照节点重要度排序进行的攻击,那么随机攻击可以理解为给所有节点随机赋排名,所以攻击的时候就等效于随机攻击了。也就是说,在随机攻击时,你只需要在蓄意攻击的基础上添加一行代码,把度排序的数组赋值上长度相同的一个随机数组,即:

    Name_Struct.Node_Key_Degree = randperm(440);
    

    主函数: testRandom(命名随意。。。) 作用:原理挺简单的,就是通过循环来删除节点。把临界矩阵中节点对应的行和列先置0,然后再删除。每删除一次节点,就生成了一个新的邻接矩阵,然后每一次都通过testEglob函数计算出当前的网络效率值。

    部分代码如下:

    % 蓄意攻击:按照节点重要性顺序,一次攻击一个节点
    
    clc;
    clear; 
    %% 
    %  按照 Degree 算法排序,删除节点
    A = A_Init;          %% 网络邻接矩阵 A
    B=[];                %%定义空数组,接收被删除的节点序号
    for i = 1:NumDelete
       %% 删除节点 Node_Key_Degree(i),用 0 占位,不能置空
        Con_Index_NetEff = testEglob( AA );
    
        Eglob(i) = Con_Index_NetEff.Net_Eff_Mymod;
    
    end          
    
    %%
    %接下来就是生成网络连通效率图
    %Eglob存储了相应的网络效率的数值
    

    正常情况下,一次随机攻击并不能说明什么,一次随机攻击的数据也并不可靠,所以需要多次随机攻击之后取平均值,这样得出的数据才更具有说服力,下一篇将介绍如何实现,敬请期待。

    希望对大家有所帮助,有任何疑问欢迎与我交流,谢谢你的时间

    给大家推荐一个非常好的科研网站,可以使用免费Web of Science、zhi网等账号。亲测好用。这个网站拥有众多的数据库,法律的、医学的、工科的,等等。


    下一篇文章:matlab实现随机攻击网络节点+蓄意攻击网络节点(2)

    给大家推荐一个非常好的科研网站可以使用免费Web of Science、zhi网、IEEE、EI等账号。亲测好用。这个网站拥有众多的数据库,法律的、医学的、工科的,等等。
    感谢大家的时间,并希望以上的内容会对大家有所帮助。

    欢迎大家访问我的个人博客

    展开全文
  • 本文基于d3.js中的力导向图对关系网络进行可视化。针对实体之间多关系亦即节点之间多条连接线的问题,采用弧形连接线,同时对节点间的多条连接线进行动态编号,并根据编号绘制不同半径的弧线,从而解决多条弧形连接...
    本文基于d3.js中的力导向图对关系网络进行可视化。针对实体之间多关系亦即节点之间多条连接线的问题,采用弧形连接线,同时对节点间的多条连接线进行动态编号,并根据编号绘制不同半径的弧线,从而解决多条弧形连接线相互遮挡的问题。同时基于svg中的path标签属性,对弧形方向进行调整,保证多条连接线在节点之间的分布具有对称效果。
    

    整体演示代码如下:

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>test4</title>
        <style>
            path.link {
              fill: none;
              stroke: #666;
              stroke-width: 1.5px;
            }
    
            marker#licensing {
              fill: green;
            }
    
            path.link.licensing {
              stroke: green;
            }
    
            path.link.resolved {
              stroke-dasharray: 0,2 1;
            }
    
            circle {
              fill: #ccc;
              stroke: #333;
              stroke-width: 1.5px;
            }
    
            text {
              font: 10px sans-serif;
              pointer-events: none;
            }
    
            text.shadow {
              stroke: #fff;
              stroke-width: 3px;
              stroke-opacity: .8;
            }
        </style>
    </head>
    <body>
    <div id="chart"></div>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script src="http://d3js.org/d3.v3.min.js"></script>
    <script type="text/javascript">
        var index = 0;
        var width = 1140,
        	height = 1000;
        var links = [
                // {source: "Microsoft", target: "Amazon", type: "suit"},
                 // {source: "Microsoft", target: "Amazon", type: "suit"},
                 // {source: "Microsoft", target: "Amazon", type: "suit"},
                 // {source: "Samsung", target: "Apple", type: "suit"},
                 // {source: "Samsung", target: "Samsung", type: "suit"},
                 {source: "a", target: "b", type: "suit"},
                 {source: "a", target: "b", type: "suit"},
                 {source: "a", target: "b", type: "suit"},
                 {source: "a", target: "b", type: "suit"},
                 {source: "a", target: "a", type: "suit"},
                 {source: "a", target: "a", type: "suit"},
                 {source: "b", target: "a", type: "suit"},
                 {source: "b", target: "a", type: "suit"},
                 // {source: "Amazon", target: "Microsoft", type: "suit"}
                 ];
        
        //关系分组
        var linkGroup = {};
        //对连接线进行统计和分组,不区分连接线的方向,只要属于同两个实体,即认为是同一组
        var linkmap = {}
        for(var i=0; i<links.length; i++){
            var key = links[i].source<links[i].target?links[i].source+':'+links[i].target:links[i].target+':'+links[i].source;
            if(!linkmap.hasOwnProperty(key)){
                linkmap[key] = 0;
            }
            linkmap[key]+=1;
            if(!linkGroup.hasOwnProperty(key)){
                linkGroup[key]=[];
            }
            linkGroup[key].push(links[i]);
        }
        //为每一条连接线分配size属性,同时对每一组连接线进行编号
        for(var i=0; i<links.length; i++){
            var key = links[i].source<links[i].target?links[i].source+':'+links[i].target:links[i].target+':'+links[i].source;
            links[i].size = linkmap[key];
            //同一组的关系进行编号
            var group = linkGroup[key];
            var keyPair = key.split(':');
            var type = 'noself';//标示该组关系是指向两个不同实体还是同一个实体
            if(keyPair[0]==keyPair[1]){
                type = 'self';
            }
            //给节点分配编号
            setLinkNumber(group,type);
        }
        console.log(links);
    
        var nodes = {};
    
        // Compute the distinct nodes from the links.
        links.forEach(function(link) {
          link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
          link.target = nodes[link.target] || (nodes[link.target] = {name: link.target});
        });
    
        var force = d3.layout.force()
            .nodes(d3.values(nodes))
            .links(links)
            .size([width, height])
            .linkDistance(600)
            .charge(-300)
            .on("tick", tick)
            .start();
    
        var svg = d3.select("body").append("svg:svg")
            .attr("width", width)
            .attr("height", height);
    
        // Per-type markers, as they don't inherit styles.
        svg.append("svg:defs").selectAll("marker")
            .data(["suit", "licensing", "resolved"])
          .enter().append("svg:marker")
            .attr("id", String)
            .attr("viewBox", "0 -5 10 10")
            .attr("refX", 30)
            .attr("refY", 0)
            .attr("markerWidth", 6)
            .attr("markerHeight", 6)
            .attr("orient", "auto")
            .append("svg:path")
            .attr("d", "M0,-5L10,0L0,5");
    
        var path = svg.append("svg:g").selectAll("path")
            .data(force.links())
          .enter().append("svg:path")
            .attr("class", function(d) { return "link " + d.type; })
            .attr("marker-end", function(d) { return "url(#" + d.type + ")"; });
    
        var circle = svg.append("svg:g").selectAll("circle")
            .data(force.nodes())
          .enter().append("svg:circle")
            .attr("r", 20)
            .call(force.drag);
    
        var text = svg.append("svg:g").selectAll("g")
            .data(force.nodes())
          .enter().append("svg:g");
    
        // A copy of the text with a thick white stroke for legibility.
        text.append("svg:text")
            .attr("x", 8)
            .attr("y", ".31em")
            .attr("class", "shadow")
            .text(function(d) { return d.name; });
    
        text.append("svg:text")
            .attr("x", 8)
            .attr("y", ".31em")
            .text(function(d) { return d.name; });
    
        // Use elliptical arc path segments to doubly-encode directionality.
        function tick() {
          path.attr("d", function(d) {
            //如果连接线连接的是同一个实体,则对path属性进行调整,绘制的圆弧属于长圆弧,同时对终点坐标进行微调,避免因坐标一致导致弧无法绘制
            if(d.target==d.source){
                dr = 30/d.linknum;
                return"M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 1,1 " + d.target.x + "," + (d.target.y+1);
            }else if(d.size%2!=0 && d.linknum==1){//如果两个节点之间的连接线数量为奇数条,则设置编号为1的连接线为直线,其他连接线会均分在两边
                return 'M '+d.source.x+' '+d.source.y+' L '+ d.target.x +' '+d.target.y;
            }
            //根据连接线编号值来动态确定该条椭圆弧线的长半轴和短半轴,当两者一致时绘制的是圆弧
            //注意A属性后面的参数,前两个为长半轴和短半轴,第三个默认为0,第四个表示弧度大于180度则为1,小于则为0,这在绘制连接到相同节点的连接线时用到;第五个参数,0表示正角,1表示负角,即用来控制弧形凹凸的方向。本文正是结合编号的正负情况来控制该条连接线的凹凸方向,从而达到连接线对称的效果
            var curve=1.5;
            var homogeneous=1.2;
            var dx = d.target.x - d.source.x,
                dy = d.target.y - d.source.y,
                dr = Math.sqrt(dx*dx+dy*dy)*(d.linknum+homogeneous)/(curve*homogeneous);
            //当节点编号为负数时,对弧形进行反向凹凸,达到对称效果
            if(d.linknum<0){
                dr = Math.sqrt(dx*dx+dy*dy)*(-1*d.linknum+homogeneous)/(curve*homogeneous);
                return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,0 " + d.target.x + "," + d.target.y;
            }
            return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
          });
    
          circle.attr("transform", function(d) {
            return "translate(" + d.x + "," + d.y + ")";
          });
    
          text.attr("transform", function(d) {
            return "translate(" + d.x + "," + d.y + ")";
          });
        }
    
        function setLinkNumber(group,type){
            if(group.length==0) return;
            //对该分组内的关系按照方向进行分类,此处根据连接的实体ASCII值大小分成两部分
            var linksA = [], linksB = [];
            for(var i = 0;i<group.length;i++){
                var link = group[i];
                if(link.source < link.target){
                    linksA.push(link);
                }else{
                    linksB.push(link);
                }
            }
            //确定关系最大编号。为了使得连接两个实体的关系曲线呈现对称,根据关系数量奇偶性进行平分。
            //特殊情况:当关系都是连接到同一个实体时,不平分
            var maxLinkNumber = 0;
            if(type=='self'){
                maxLinkNumber = group.length;
            }else{
                maxLinkNumber = group.length%2==0?group.length/2:(group.length+1)/2;
            }
            //如果两个方向的关系数量一样多,直接分别设置编号即可
            if(linksA.length==linksB.length){
                var startLinkNumber = 1;
                for(var i=0;i<linksA.length;i++){
                    linksA[i].linknum = startLinkNumber++;
                }
                startLinkNumber = 1;
                for(var i=0;i<linksB.length;i++){
                    linksB[i].linknum = startLinkNumber++;
                }
            }else{//当两个方向的关系数量不对等时,先对数量少的那组关系从最大编号值进行逆序编号,然后在对另一组数量多的关系从编号1一直编号到最大编号,再对剩余关系进行负编号
                //如果抛开负号,可以发现,最终所有关系的编号序列一定是对称的(对称是为了保证后续绘图时曲线的弯曲程度也是对称的)
                var biggerLinks,smallerLinks;
                if(linksA.length>linksB.length){
                    biggerLinks = linksA;
                    smallerLinks = linksB;
                }else{
                    biggerLinks = linksB;
                    smallerLinks = linksA;
                }
    
                var startLinkNumber = maxLinkNumber;
                for(var i=0;i<smallerLinks.length;i++){
                    smallerLinks[i].linknum = startLinkNumber--;
                }
                var tmpNumber = startLinkNumber;
    
                startLinkNumber = 1;
                var p = 0;
                while(startLinkNumber<=maxLinkNumber){
                    biggerLinks[p++].linknum = startLinkNumber++;
                }
                //开始负编号
                startLinkNumber = 0-tmpNumber;
                for(var i=p;i<biggerLinks.length;i++){
                    biggerLinks[i].linknum = startLinkNumber++;
                }
            } 
        }
    </script>
    </body>
    </html>
    最终效果如下(a、b节点之间6条连接线,四条a->b,两条b->a):


    奇数条连接线效果(带有直线):


    说明:本文专注于实现多连接线和对称效果,其他可视化效果可自行修改设置。

    参考资源:

    1、https://stackoverflow.com/questions/37417459/drawing-multiple-links-between-fixed-nodes

    展开全文
  • networkx笔记:绘制基本网络图

    万次阅读 2015-08-13 22:14:05
    绘制基本网络图 用matplotlib绘制网络图 基本流程: 1. 导入networkx,matplotlib包 2. 建立网络 3. 绘制网络 nx.draw() 4. 建立布局 pos = nx.spring_layout美化作用 最基本画图程序 import import networkx as ...

    绘制基本网络图

    用matplotlib绘制网络图
    基本流程:
    1. 导入networkx,matplotlib包
    2. 建立网络
    3. 绘制网络 nx.draw()
    4. 建立布局 pos = nx.spring_layout美化作用
    最基本画图程序

    
    import import networkx as nx             #导入networkx包
    import matplotlib.pyplot as plt 
    G = nx.random_graphs.barabasi_albert_graph(100,1)   #生成一个BA无标度网络G
    nx.draw(G)                               #绘制网络G
    plt.savefig("ba.png")           #输出方式1: 将图像存为一个png格式的图片文件
    plt.show()                            #输出方式2: 在窗口中显示这幅图像 
    

    networkx 提供画图的函数有:

    1. draw(G,[pos,ax,hold])
    2. draw_networkx(G,[pos,with_labels])
    3. draw_networkx_nodes(G,pos,[nodelist]) 绘制网络G的节点图
    4. draw_networkx_edges(G,pos[edgelist]) 绘制网络G的边图
    5. draw_networkx_edge_labels(G, pos[, ...]) 绘制网络G的边图,边有label
      ---有layout 布局画图函数的分界线---
    6. draw_circular(G, **kwargs) Draw the graph G with a circular layout.
    7. draw_random(G, **kwargs) Draw the graph G with a random layout.
    8. draw_spectral(G, **kwargs) Draw the graph G with a spectral layout.
    9. draw_spring(G, **kwargs) Draw the graph G with a spring layout.
    10. draw_shell(G, **kwargs) Draw networkx graph with shell layout.
    11. draw_graphviz(G[, prog]) Draw networkx graph with graphviz layout.

    networkx 画图参数:
    node_size: 指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)
    node_color: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如'r'为红色,'b'为绿色等,具体可查看手册),用“数据字典”赋值的时候必须对字典取值(.values())后再赋值
    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: 节点标签字体颜色(默认为黑色)
    e.g. nx.draw(G,node_size = 30, with_label = False)
    绘制节点的尺寸为30,不带标签的网络图。


    布局指定节点排列形式

    pos = nx.spring_layout
    

    建立布局,对图进行布局美化,networkx 提供的布局方式有:
    - circular_layout:节点在一个圆环上均匀分布
    - random_layout:节点随机分布
    - shell_layout:节点在同心圆上分布
    - spring_layout: 用Fruchterman-Reingold算法排列节点(这个算法我不了解,样子类似多中心放射状)
    - spectral_layout:根据图的拉普拉斯特征向量排列节
    布局也可用pos参数指定,例如,nx.draw(G, pos = spring_layout(G)) 这样指定了networkx上以中心放射状分布.

    绘制划分后的社区

    先看一段代码,代码源自site

    
    import community
    partition = community.best_partition(User)
    size = float(len(set(partition.values())))
    pos = nx.spring_layout(G)
    count = 0.
    
    for com in set(partition.values()) :
        count = count + 1.
        list_nodes = [nodes for nodes in partition.keys()
                                    if partition[nodes] == com]                 
        nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,
                                    node_color = str(count / size))
    
    nx.draw_networkx_edges(User,pos,with_labels = True, alpha=0.5 )
    plt.show()
    

    communit.best_partition 是社区划分方法,算法是根据Vincent D.Blondel 等人于2008提出,是基于modularity optimization的heuristic方法.
    partition的结果存在字典数据类型:
    {'1': 0, '3': 1, '2': 0, '5': 1, '4': 0, '6': 0}
    单引号里的数据是key,也就是网络中节点编号。
    冒号后面的数值,表示网络中节点的编号属于哪个社区。也就是社区标号。如'6': 0表示6节点属于0社区

     list_nodes = [nodes for nodes in partition.keys()
                                    if partition[nodes] == com] 
    

    每次循环list_nodes结果是社区i对应的用户编号。
    如第一次循环结果是com = 0, list_nodes= ['1','2','4','6']
    第二次循环的结果是com = 1, list_nodes = ['3','6']
    这样每次循环,画出一个社区的所有节点:

     nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,
                                    node_color = str(count / size))
    

    循环结束后通过颜色来标识不同社区

    http://segmentfault.com/a/1190000000527216

    展开全文
  • 【网络】绘制基本网络图

    千次阅读 2017-12-02 17:07:57
    绘制基本网络图用matplotlib绘制网络图基本流程:1. 导入networkx,matplotlib包2. 建立网络3. 绘制网络 nx.draw()4. 建立布局 pos = nx.spring_layout美化作用最基本画图程序import import networkx as nx #导入...

    绘制基本网络图

    用matplotlib绘制网络图
    基本流程:
    1. 导入networkx,matplotlib包
    2. 建立网络
    3. 绘制网络 nx.draw()
    4. 建立布局 pos = nx.spring_layout美化作用
    最基本画图程序

    import import networkx as nx             #导入networkx包
    import matplotlib.pyplot as plt 
    G = nx.random_graphs.barabasi_albert_graph(100,1)   #生成一个BA无标度网络G
    nx.draw(G)                               #绘制网络G
    plt.savefig("ba.png")           #输出方式1: 将图像存为一个png格式的图片文件
    plt.show()                            #输出方式2: 在窗口中显示这幅图像 
    

    networkx 提供画图的函数有:

    1. draw(G,[pos,ax,hold])
    2. draw_networkx(G,[pos,with_labels])
    3. draw_networkx_nodes(G,pos,[nodelist]) 绘制网络G的节点图
    4. draw_networkx_edges(G,pos[edgelist]) 绘制网络G的边图
    5. draw_networkx_edge_labels(G, pos[, ...]) 绘制网络G的边图,边有label
      ---有layout 布局画图函数的分界线---
    6. draw_circular(G, **kwargs) Draw the graph G with a circular layout.
    7. draw_random(G, **kwargs) Draw the graph G with a random layout.
    8. draw_spectral(G, **kwargs) Draw the graph G with a spectral layout.
    9. draw_spring(G, **kwargs) Draw the graph G with a spring layout.
    10. draw_shell(G, **kwargs) Draw networkx graph with shell layout.
    11. draw_graphviz(G[, prog]) Draw networkx graph with graphviz layout.

    networkx 画图参数:
    node_size: 指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)
    node_color: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如'r'为红色,'b'为绿色等,具体可查看手册),用“数据字典”赋值的时候必须对字典取值(.values())后再赋值
    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: 节点标签字体颜色(默认为黑色)
    e.g. nx.draw(G,node_size = 30, with_label = False)
    绘制节点的尺寸为30,不带标签的网络图。


    布局指定节点排列形式

    pos = nx.spring_layout
    

    建立布局,对图进行布局美化,networkx 提供的布局方式有:
    - circular_layout:节点在一个圆环上均匀分布
    - random_layout:节点随机分布
    - shell_layout:节点在同心圆上分布
    - spring_layout: 用Fruchterman-Reingold算法排列节点(这个算法我不了解,样子类似多中心放射状)
    - spectral_layout:根据图的拉普拉斯特征向量排列节
    布局也可用pos参数指定,例如,nx.draw(G, pos = spring_layout(G)) 这样指定了networkx上以中心放射状分布.

    绘制划分后的社区

    先看一段代码,代码源自site

    partition = community.best_partition(User)
    size = float(len(set(partition.values())))
    pos = nx.spring_layout(G)
    count = 0.
    
    for com in set(partition.values()) :
        count = count + 1.
        list_nodes = [nodes for nodes in partition.keys()
                                    if partition[nodes] == com]                 
        nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,
                                    node_color = str(count / size))
    
    nx.draw_networkx_edges(User,pos,with_labels = True, alpha=0.5 )
    plt.show()
    

    communit.best_partition 是社区划分方法,算法是根据Vincent D.Blondel 等人于2008提出,是基于modularity optimization的heuristic方法.
    partition的结果存在字典数据类型:
    {'1': 0, '3': 1, '2': 0, '5': 1, '4': 0, '6': 0}
    单引号里的数据是key,也就是网络中节点编号。
    冒号后面的数值,表示网络中节点的编号属于哪个社区。也就是社区标号。如'6': 0表示6节点属于0社区

     list_nodes = [nodes for nodes in partition.keys()
                                    if partition[nodes] == com] 
    

    每次循环list_nodes结果是社区i对应的用户编号。
    如第一次循环结果是com = 0, list_nodes= ['1','2','4','6']
    第二次循环的结果是com = 1, list_nodes = ['3','6']
    这样每次循环,画出一个社区的所有节点:

     nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,
                                    node_color = str(count / size))
    

    循环结束后通过颜色来标识不同社区

    http://segmentfault.com/a/1190000000527216

    展开全文
  • 单代号网络图

    千次阅读 2014-05-11 14:01:44
    单代号网络图 是以节点及其编号表示工作,以箭线表示工作之间逻辑关系的网络图,并在节点中加注工作代号,名称和持续时间。 用一个圆圈代表一项活动,并将活动名称写在圆圈中。箭线符号仅用来表示相关活动之间的...
  • 生成蜂窝网络图

    千次阅读 2012-12-22 21:15:27
    有蜂窝网络,从1开始,按顺时针方向编号。要求给一个蜂窝数目N,得到整个蜂窝网络。 设每个节点周边的六个方向,按顺时针为 d1~d6。 思路就是根据当前的一个节点,要发展出下一个节点,那么下一个节点在...
  • 项目管理网络图概念总结

    千次阅读 2020-07-30 22:27:01
    网络图的相关概念 单代号和双代号的区别 ES、EF、LS、LF、TF、FF 关键路径
  • 这里的Id和Label分别代表着节点编号和标签,Modularity Class代表社团序号 记得看一下你的Id和Label的选项是否为“不可选”,如果你的结果和下面这张图不一样…那你可能就要考虑一下是不是选择的编码方式有问题了 ...
  • 一文搞懂什么是单代号网络图

    千次阅读 2020-11-03 08:39:46
    这种网络图也被称作为单代号网络图(只有节点需要编号)或活动节点图(Active On Node, AON)。 前导图法包括活动之间存在4种类型的依赖关系,分别是: 1.结束-开始的关系(F-S型):前序活动结束后,后续活动才能...
  • 双代号网络图

    千次阅读 2014-05-11 13:50:11
    箭线图(ADM)法又称为双代号网络图法,箭线图法用箭线表示活动,活动之间用节点(称作“事件”)连接,只能表示结束——开始关系,每个活动必须用唯一的紧前事件和唯一的紧后事件描述;...双代号网络图的组成
  • Zigbee 网络层分配机制--计算个节点网络地址

    千次阅读 多人点赞 2020-12-21 23:34:19
    其中,16bit网络地址实在节点加入网络时由其父节点动态分配,这种地址仅仅用于路由机制和网络中的数据传输,类似于Internet中使用的IP地址:64bit地址类似于MAC地址,是每个节点的唯一标识。 加入Zigbee网络节点...
  • 众所周知,Hadoop框架使用Mapper将数据处理成一个个的key/value键值,在网络节点进行整理(shuffle),然后使用Reducer处理数据并进行最终输出。这其中假如我们有10亿个数据,Mapper会生成10亿个键值网络...
  • 协调器周期性以广播的形式向终端节点发送数据(每隔5s广播一次),终端节点接收数据后,使开发板...”(按组网节点编号),协调器收到终端节点发回的数据后,通过串口输出到PC机,用户可以通过串口调试助手查看该信息。
  • 由于网络需要从0到9一共十个数字中挑选出一个,于是我们的网络最终输出层应该有十个节点,每个节点对应一个数字。假设图片对应的是数字0,那么输出层网络中,第一个节点应该输出一个高百分比,其他节点输出低百分比...
  • 该系列文章主要讲解知识图谱及Neo4j数据库的用法,本篇文章是作者学习《Neo4j基础入门》书籍的在线笔记,主要讲解Neo4j的基础知识及基本语法,希望大家喜欢。
  • IEEE39节点

    2018-03-29 16:51:29
    39节点系统,系统中的各个线路进项编号,并进行某个区域划分
  • 数据流
  • 传感器节点分布绘制-matlab

    千次阅读 2014-02-28 22:51:02
    %%----------------------传感器分布--------------------------...SensorY:传感器节点的Y坐标---这里可能要考虑一下传感器节点布置的密度问题,不过对于水声网络意义不大,我们这里假定节点随机分布 AreaLength=1000
  • Gephi画无向和有向(显示节点和边序号) 数据形式 如果画无向只要把Type这一列设置成undirected,不填入数据默认是directed 导入数据以后就可以设计节点以及边的属性了,如下: 显示的有向如下: ...
  • [python] 基于NetworkX实现网络图的绘制

    千次阅读 多人点赞 2019-10-28 20:05:00
    NETWORK CHART(网络图)代码下载 网络图 (或图表或图形)显示了一组实体之间的互连。每个实体由一个或多个节点表示。节点之间的连接通过链接(或边)表示。网络的理论与实现是一个广阔的研究领域。整个网络都可以...
  • 1.karate美国空手道俱乐部 *2.Dolphin海豚网络 3.football网络
  • Python networkx 绘制网络图简介

    千次阅读 2016-10-26 20:59:05
    绘制基本网络图 用matplotlib绘制网络图 基本流程: 1. 导入networkx,matplotlib包 2. 建立网络 3. 绘制网络 nx.draw() 4. 建立布局 pos = nx.spring_layout美化作用 最基本画图程序 1 imp
  • python networkx 绘制网络图简介

    千次阅读 2016-10-26 18:15:33
    绘制基本网络图 用matplotlib绘制网络图 基本流程: 1. 导入networkx,matplotlib包 2. 建立网络 3. 绘制网络 nx.draw() 4. 建立布局 pos = nx.spring_layout美化作用 最基本画图程序 1
  • 社交网络图挖掘4--三角形计数问题

    千次阅读 2017-10-25 18:59:39
    计算一个随机中的三角形数目期望值由n个节点和m条边随机构成的的中: 中总共有(n3)=n3/6\bigl( \begin{smallmatrix} n \\ 3 \end{smallmatrix} \bigr)=n^3/6个三节点集合; 在任意给定的两个节点之间加入边的...
  • 扩增子统计绘图8网络图-MENA

    千次阅读 2017-08-29 16:13:21
    本网Markdown排版支持较差,格式不满意的用户请跳转至 或“宏基因组”公众号阅读;...第三部《扩增子统计绘图》:即是结果进行可视和统计检验,达到出版级的图表结果。《扩增子统计绘图》系列文章介绍《扩
  • Python networks画网络图(转)

    千次阅读 2017-04-16 15:53:17
    绘制基本网络图 用matplotlib绘制网络图 基本流程: 1. 导入networkx,matplotlib包 2. 建立网络 3. 绘制网络 nx.draw() 4. 建立布局 pos = nx.spring_layout美化作用 最基本画图程序 1 imp
  • 按线路进行节点的统计,先编号,然后去除掉重合的节点 统计连接关系有一定的规则:比如从左往右统计、从上往下统计,这样可以避免重复统计 不要直接列出邻接矩阵,先统计出连接关系生成邻接表

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,920
精华内容 17,968
关键字:

对网络图的节点进行编号时