在cytoscape.js中按度过滤节点

时间:2018-07-10 16:17:01

标签: javascript html layout graph cytoscape.js

我有一个cytoscape.js图,我想按度大小过滤节点。例如,如果node1仅连接到node2和node3,则当我从过滤器中选择阈值3时,将删除边缘少于3个的所有节点。现在我有这个问题:

1)如何按度过滤?我知道var collection = cy.elements("node[weight > 2]");选择一个集合,cy.remove(collection);会删除那些节点,但是如何按连接边的数量删除呢?

2)删除一些节点后,需要重新运行布局以更好地表示。我找到了一个解决方案,但是它花费的时间与删除节点之前差不多。我测试了这段代码:

添加节点的代码:

    for (var i = 0; i < keys.length; i++) {
    try {

        cy.add({
                data: {
                    id: keys[i],
                    weight: i
                }
            }
        );
    }

布局代码:

var layout;
cy.ready(function () {
    layout = cy.layout({
        name: 'cose-bilkent',
        animate: false,
        padding: 100,
        nodeRepulsion: 20000,
        idealEdgeLength: 700,
        edgeElasticity: 10,
        numIter: 2500,
        initialEnergyOnIncremental: 0.01,
        ready: function () {
        }, // on layoutready
        stop: function () {
            cy.endBatch();
            var b64key = 'base64,';
            var b64 = cy.png().substring(cy.png().indexOf(b64key) + b64key.length);

            var imgBlob = b64toBlob(b64, 'image/png');
            saveAs(imgBlob, 'graph.png');


            alert(new Date().getTime() - n);
            n = new Date().getTime();
        }
    });
    layout.run();
});

然后在按钮上单击“运行”:

    var collection = cy.elements("node[weight > 2]");
    cy.remove( collection );
    layout.run();

但是加载带有3个节点的图形需要37秒!!!

0 个答案:

没有答案