首页 > 解决方案 > cytoscape.js 中是否有边缘加权弹簧嵌入式布局?

问题描述

我们需要在 Angular 应用程序中显示节点和边图,我们选择在 cytoscape 中而不是 high charts/amCharts/D3 中执行此操作。Cytoscape 加载速度更快,并且是唯一可以处理我们拥有的 1000 个节点的库。其他人打破或滞后。

我们下载了 cytoscape 应用程序,并且能够看到布局“边缘加权弹簧嵌入”。它以整体球形布局显示了我们相互连接的节点。

现在我想要在 cytoscape js 中也一样,看起来我们在https://js.cytoscape.org/中只有少数布局

这种布局在 cytoscape js 中是否可行?如何做到这一点?(目前使用 fcose 布局,但我们真的很喜欢 'Edge weighted spring 嵌入式布局带来的地球外观。

编辑:

这是另一个例子:我想在 cytoscape.js 中实现这个布局。我应该遵循什么布局?或者这是 js 中没有的东西,只能在桌面应用程序中使用

在此处输入图像描述

标签: cytoscape.jscytoscape

解决方案


我认为有三种选择:

  • Compound Spring Embedder布局
  • Bilkent 的 Compound Spring Embedder 布局(用于增强的复合节点放置)cos-bilkent
  • 基于约束的布局cola.js

它们都使用某种强制导向的布局,我认为您应该尝试一下并使用最适合您需求的布局。您可以为每个布局设置许多参数,因此请仔细查看它们。例如,如果您在 cola.js 布局中将无限设置为 true,您将看到您可以移动节点并看到布局强制它们回到或到合适的位置:

document.addEventListener("DOMContentLoaded", function() {
  var cy = (window.cy = cytoscape({
    container: document.getElementById("cy"),
    autounselectify: true,

    boxSelectionEnabled: false,
    layout: {
      name: "cola",
      infinite: true,
      fit: false
    },
    style: [{
        selector: "node",
        css: {
          "background-color": "#f92411"
        }
      },
      {
        selector: "edge",
        css: {
          "line-color": "#f92411"
        }
      }
    ],
    elements: {
      nodes: [{
          data: {
            id: "1",
            label: "P"
          }
        },
        {
          data: {
            id: "2",
            label: "sucrose phosphate phosphatase"
          }
        },
        {
          data: {
            id: "4",
            label: "sucrose 6-phosphate"
          }
        },
        {
          data: {
            id: "6",
            label: "sucrose"
          }
        },
        {
          data: {
            id: "8",
            label: "invertase"
          }
        },
        {
          data: {
            id: "10",
            label: "fructose"
          }
        },
        {
          data: {
            id: "12",
            label: "fructokinase"
          }
        },
        {
          data: {
            id: "14",
            label: "fructose 6-phosphate"
          }
        },
        {
          data: {
            id: "20",
            label: "phosphoglucose isomerase"
          }
        },
        {
          data: {
            id: "22",
            label: "glucose 6-phosphate"
          }
        },
        {
          data: {
            id: "28",
            label: "glucose"
          }
        },
        {
          data: {
            id: "30",
            label: "hexokinase"
          }
        },
        {
          data: {
            id: "33",
            label: "sucrose synthase"
          }
        },
        {
          data: {
            id: "36",
            label: "UDP - glucose"
          }
        },
        {
          data: {
            id: "38",
            label: "sucrose phosphate synthase"
          }
        },
        {
          data: {
            id: "41",
            label: "UDP"
          }
        },
        {
          data: {
            id: "44",
            label: "fructose 6-phosphate"
          }
        },
        {
          data: {
            id: "46",
            label: "ATP"
          }
        },
        {
          data: {
            id: "47",
            label: "ATP"
          }
        },
        {
          data: {
            id: "52",
            label: "ATP"
          }
        },
        {
          data: {
            id: "57",
            label: "ADP"
          }
        },
        {
          data: {
            id: "66",
            label: "PP"
          }
        },
        {
          data: {
            id: "71",
            label: "UTP"
          }
        },
        {
          data: {
            id: "76",
            label: "UDP glucose pyrophosphorylase"
          }
        },
        {
          data: {
            id: "80",
            label: "glucose 1-phosphate"
          }
        },
        {
          data: {
            id: "86",
            label: "phospho- glucomutase (cPGM)"
          }
        },
        {
          data: {
            id: "89",
            label: "G1P transporter"
          }
        },
        {
          data: {
            id: "90",
            label: "P"
          }
        },
        {
          data: {
            id: "95",
            label: "P"
          }
        },
        {
          data: {
            id: "102",
            label: "P"
          }
        },
        {
          data: {
            id: "103",
            label: "P"
          }
        },
        {
          data: {
            id: "104",
            label: "G6P transporter"
          }
        },
        {
          data: {
            id: "109",
            label: "glucose 6-phosphate"
          }
        },
        {
          data: {
            id: "115",
            label: "phospho- glucomutase (cPGM)"
          }
        },
        {
          data: {
            id: "121",
            label: "glucose 1-phosphate"
          }
        },
        {
          data: {
            id: "128",
            label: "ADPglucose pyrophosphorylase (pAGPase)"
          }
        },
        {
          data: {
            id: "130",
            label: "ADP - glucose"
          }
        },
        {
          data: {
            id: "136",
            label: "PP"
          }
        },
        {
          data: {
            id: "141",
            label: "ATP"
          }
        },
        {
          data: {
            id: "148",
            label: "inorganic diphosphatase"
          }
        },
        {
          data: {
            id: "149",
            label: "P"
          }
        },
        {
          data: {
            id: "156",
            label: "phosphate transporter"
          }
        },
        {
          data: {
            id: "158",
            label: "P"
          }
        },
        {
          data: {
            id: "164",
            label: "starch synthase (simpl.)"
          }
        },
        {
          data: {
            id: "166",
            label: "ADP"
          }
        },
        {
          data: {
            id: "172",
            label: "starch"
          }
        },
        {
          data: {
            id: "178",
            label: "ATP/ADP transporter"
          }
        },
        {
          data: {
            id: "179",
            label: "ADP"
          }
        },
        {
          data: {
            id: "184",
            label: "ADP"
          }
        },
        {
          data: {
            id: "189",
            label: "ATP"
          }
        }
      ],
      edges: [{
          data: {
            source: "2",
            target: "1"
          }
        },
        {
          data: {
            source: "4",
            target: "2"
          }
        },
        {
          data: {
            source: "2",
            target: "6"
          }
        },
        {
          data: {
            source: "6",
            target: "8"
          }
        },
        {
          data: {
            source: "8",
            target: "10"
          }
        },
        {
          data: {
            source: "12",
            target: "14"
          }
        },
        {
          data: {
            source: "14",
            target: "20"
          }
        },
        {
          data: {
            source: "20",
            target: "22"
          }
        },
        {
          data: {
            source: "8",
            target: "28"
          }
        },
        {
          data: {
            source: "28",
            target: "30"
          }
        },
        {
          data: {
            source: "30",
            target: "22"
          }
        },
        {
          data: {
            source: "6",
            target: "33"
          }
        },
        {
          data: {
            source: "33",
            target: "10"
          }
        },
        {
          data: {
            source: "33",
            target: "36"
          }
        },
        {
          data: {
            source: "36",
            target: "38"
          }
        },
        {
          data: {
            source: "38",
            target: "4"
          }
        },
        {
          data: {
            source: "38",
            target: "41"
          }
        },
        {
          data: {
            source: "41",
            target: "33"
          }
        },
        {
          data: {
            source: "44",
            target: "38"
          }
        },
        {
          data: {
            source: "52",
            target: "12"
          }
        },
        {
          data: {
            source: "12",
            target: "57"
          }
        },
        {
          data: {
            source: "46",
            target: "30"
          }
        },
        {
          data: {
            source: "30",
            target: "47"
          }
        },
        {
          data: {
            source: "71",
            target: "76"
          }
        },
        {
          data: {
            source: "76",
            target: "66"
          }
        },
        {
          data: {
            source: "76",
            target: "36"
          }
        },
        {
          data: {
            source: "80",
            target: "76"
          }
        },
        {
          data: {
            source: "22",
            target: "86"
          }
        },
        {
          data: {
            source: "86",
            target: "80"
          }
        },
        {
          data: {
            source: "95",
            target: "89"
          }
        },
        {
          data: {
            source: "89",
            target: "90"
          }
        },
        {
          data: {
            source: "102",
            target: "104"
          }
        },
        {
          data: {
            source: "80",
            target: "89"
          }
        },
        {
          data: {
            source: "104",
            target: "109"
          }
        },
        {
          data: {
            source: "115",
            target: "109"
          }
        },
        {
          data: {
            source: "121",
            target: "89"
          }
        },
        {
          data: {
            source: "121",
            target: "115"
          }
        },
        {
          data: {
            source: "121",
            target: "128"
          }
        },
        {
          data: {
            source: "128",
            target: "130"
          }
        },
        {
          data: {
            source: "141",
            target: "128"
          }
        },
        {
          data: {
            source: "128",
            target: "136"
          }
        },
        {
          data: {
            source: "136",
            target: "148"
          }
        },
        {
          data: {
            source: "148",
            target: "149"
          }
        },
        {
          data: {
            source: "149",
            target: "156"
          }
        },
        {
          data: {
            source: "156",
            target: "158"
          }
        },
        {
          data: {
            source: "130",
            target: "164"
          }
        },
        {
          data: {
            source: "164",
            target: "166"
          }
        },
        {
          data: {
            source: "178",
            target: "179"
          }
        },
        {
          data: {
            source: "184",
            target: "178"
          }
        },
        {
          data: {
            source: "178",
            target: "189"
          }
        },
        {
          data: {
            source: "141",
            target: "178"
          }
        },
        {
          data: {
            source: "104",
            target: "103"
          }
        },
        {
          data: {
            source: "10",
            target: "12"
          }
        },
        {
          data: {
            source: "164",
            target: "172"
          }
        },
        {
          data: {
            source: "22",
            target: "104"
          }
        }
      ]
    }
  }));
  cy.unbind("tapend");
  cy.bind("tapend", "node", function() {
    cy.animate({
      fit: {
        eles: cy.elements(),
        padding: 20
      },
      center: {
        eles: cy.elements()
      }
    }, {
      duration: 500
    });
  });
});
body {
  font-family: helvetica;
  font-size: 14px;
}

#cy {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 999;
}

h1 {
  opacity: 0.5;
  font-size: 1em;
}
<!DOCTYPE>

<html>

<head>
  <title>cytoscape-cola.js demo</title>

  <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">

  <script src="https://unpkg.com/cytoscape/dist/cytoscape.min.js"></script>

  <!-- for testing with local version of cytoscape.js -->
  <!--<script src="../cytoscape.js/build/cytoscape.js"></script>-->

  <script src="https://unpkg.com/webcola/WebCola/cola.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/cytoscape-cola@2.3.0/cytoscape-cola.min.js"></script>

</head>

<body>
  <h1>cytoscape-cola demo</h1>

  <div id="cy"></div>

</body>

</html>


推荐阅读