使用Cytoscape.js

时间:2016-12-12 18:16:49

标签: javascript graph-theory cytoscape.js cytoscape network-analysis

我需要为图表上的每个节点计算degree,亲近度和中介中心性。我目前正在cy.ready()事件后的每个节点上使用Cytoscape.js中内置的函数。但是,由于图表非常大(250多个节点,650多个连接),因此计算时间过长。任何人都可以提出更有效的方法吗?

var calculateSNA = function() {
  // Don't run if already set...
  if(data.sna) return false
  console.log('Running SNA')

  _.map(nodes, function(node) {
    var target = cy.nodes('#' + node.data.id)
    node.data.sna  = {
      degreeCentrality: cy.$().dc({ root: target }).degree,
      closenessCentrality: cy.$().cc({ root: target }),
      betweennessCentrality: cy.$().bc().betweenness(target)
    }
    return node
  })

  // Add SNA data to local storage
  Data.add({
    sna: true
  })
  Node.set(nodes)

  console.log('SNA complete')
}


cy.ready(function(event) {
  console.log('cy.ready()')
  calculateSNA()
})

1 个答案:

答案 0 :(得分:0)

运行算法一次,而不是运行N次。然后只查询结果:

var Highcharts = require('highcharts');

// This is how a module is loaded. Pass in Highcharts as a parameter.
require('highcharts/modules/exporting')(Highcharts);

var chart = Highcharts.chart(null, {
    series: [{
        data: [1, 3, 2, 4]
    }],
    // ...
});

使用规范化版本的中心性算法,除非您有充分的理由不这样做。如果您将一个图表中的结果与另一个图表中的结果进行比较,那么只有标准化版本才有意义。例如。