我想在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
答案 0 :(得分:1)
如果您希望在边缘权重较高的情况下将节点拉得更近,则边缘长度需要与权重成反比,例如: k / edge.data('weight')
代表某个常数k
。您必须尝试找出哪种k
值最适合您的数据。
查看Cola演示源代码示例。它使用这种精确的方法,滑块只会更改k
值。