Using edge weights for directional orientation (CoSE) in cytoscape.js

  • I'm not sure how best to use the weight of the edge (for example, the strength of the interaction between two interacting proteins), while at the same time creating a directional force scheme using the CoSE plugin in cytoscape.js. Can anyone provide any pointers. Should there be "idealEdgeLength" or "edgeElasticity"?

  • (EDIT) The figure below shows what I am currently receiving (A) and what I am trying to achieve (B). Also below are the options I used to create the layout.

Thanks, Dutt.

PS: Click to view a picture showing the current (marked as "A") and expected (marked as "B"). Below are the layout options for "A".

var options = { name: 'cose', // Called on `layoutready` ready: function () { }, // Called on `layoutstop` stop: function () { }, // Whether to animate while running the layout animate: true, // Number of iterations between consecutive screen positions update (0 -> only updated on the end) refresh: 20, // 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, componentSpacing: 100, // Whether to randomize node positions on the beginning randomize: true, // Whether to use the JS console to print debug messages debug: false, // Node repulsion (non overlapping) multiplier nodeRepulsion: 400000, // Node repulsion (overlapping) multiplier nodeOverlap: 10, // Ideal edge (non nested) length idealEdgeLength: 10, // Divisor to compute edge forces edgeElasticity: 100, // Nesting factor (multiplier) to compute ideal edge length for nested edges nestingFactor: 5, // Gravity force (constant) gravity: 80, // Maximum number of iterations to perform numIter: 10000, // Initial temperature (maximum node displacement) initialTemp: 100, // Cooling factor (how the temperature is reduced between consecutive iterations coolingFactor: 0.95, // Lower temperature threshold (below this point the layout will end) minTemp: 1.0 }; 
+5
source share
2 answers

You can specify functions instead of static numbers for some key CoSE layout settings. Functions take edges (or nodes, in some cases), so you can adapt the layout based on the properties of the edge.

So you can do something like this:

  idealEdgeLength: function (edge) { // Default is: 10 // Instead, base it on "weight" return edge.data().weight * .5 }, edgeElasticity: function (edge) { // Default is: 100 // Instead, base it on "weight" return edge.data().weight * 4 }, 

You will have to experiment with ranges that work with the layout engine and the weight range that you expect as input, but this approach should work with AOK.

+2
source

The ideal length of the rib sets the default value, while elasticity determines one of the forces determining the final length. In general, for physics simulation layouts, you need to experiment with different values ​​and evaluate the results for your specific graphs.

0
source

Source: https://habr.com/ru/post/1234889/


All Articles