Cytoscape Cola.js布局边长=文本语料库可视化

时间:2017-03-05 20:11:50

标签: javascript json cytoscape.js cytoscape webcola

我想在data.json中设置权重的边长。

cytoscape-spread demo一样,根据重量,边长应该更长。

"data" : {
    "id" : "1965",
    "source" : "108",
    "target" : "149",
    "shared_name" : "A (interacts with) B",
    "shared_interaction" : "interacts with",
    "name" : "A (interacts with) B",
    "interaction" : "interacts with",
    "SUID" : 1965,
    "weight" : 342,
    "selected" : false
  },
  "selected" : false

加权是A和B在我的文本语料库中站立的频率。

我尝试了不同的布局,但现在不知道如何改变位置,最高权重的距离最短。

目前我尝试使用'cose'布局并设置idealEdgeLength:function(edge){return edge.data('weight'); }

  var options = {
  name: 'cose',

  // Called on `layoutready`
  ready: function(){},

  // Called on `layoutstop`
  stop: function(){},

  // Whether to animate while running the layout
  animate: true,


  // Whether to fit the network view after when done
  fit: true,

  // Padding on fit
  padding: 30,

  // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
  boundingBox: undefined,

  // Randomize the initial positions of the nodes (true) or use existing positions (false)
  randomize: false,


  // Ideal edge (non nested) length
  idealEdgeLength: function( edge ){ return edge.data('weight'); },


};

cy.layout( options );

和cola.js edgeLength:

 name: 'cola',
            animate: true, // whether to show the layout as it's running
            refresh: 1, // number of ticks per frame; higher is faster but more jerky
            maxSimulationTime: 4000, // max length in ms to run the layout
            ungrabifyWhileSimulating: false, // so you can't drag nodes during layout
            fit: true, // on every layout reposition of nodes, fit the viewport
            padding: 0, // padding around the simulation
            boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }

            // layout event callbacks
            ready: function(){}, // on layoutready
            stop: function(){}, // on layoutstop

            // positioning options
            randomize: false, // use random node positions at beginning of layout
            avoidOverlap: true, // if true, prevents overlap of node bounding boxes
            handleDisconnected: true, // if true, avoids disconnected components from overlapping
            nodeSpacing: function( node ){ return 10; }, // extra spacing around nodes
            flow: undefined, // use DAG/tree flow layout if specified, e.g. { axis: 'y', minSeparation: 30 }
            alignment: undefined, // relative alignment constraints on nodes, e.g. function( node ){ return { x: 0, y: 1 } }

            // different methods of specifying edge length
            // each can be a constant numerical value or a function like `function( edge ){ return 2; }`
            edgeLength: function( edge ){var len = parseInt(edge.data('weight')); return len; }, // sets edge length directly in simulation
            edgeSymDiffLength: undefined, // symmetric diff edge length in simulation
            edgeJaccardLength: undefined, // jaccard edge length in simulation

            // iterations of cola algorithm; uses default values on undefined
            unconstrIter: undefined, // unconstrained initial layout iterations
            userConstIter: undefined, // initial layout iterations with user-specified constraints
            allConstIter: undefined, // initial layout iterations with all constraints including non-overlap

            // infinite layout options
            infinite: false // overrides all other options for a forces-all-the-time mode

1 个答案:

答案 0 :(得分:1)

如果您希望在边缘权重较高的情况下将节点拉得更近,则边缘长度需要与权重成反比,例如: k / edge.data('weight')代表某个常数k。您必须尝试找出哪种k值最适合您的数据。

查看Cola演示源代码示例。它使用这种精确的方法,滑块只会更改k值。

http://js.cytoscape.org/demos/2ebdc40f1c2540de6cf0/