如何使用cytoscape同心布局创建图层

问题描述 投票:0回答:1

我试图用同心的布局创建内层和外层。但是我不起作用。

这是我的样子:

内部和外部节点混合在一起。

current graph

这就是我所期望的:

expected

我的数据:

{
 data: [
  {data: {
    id: 'innerA', level: 1 },
    group: 'nodes'
  },
  ....
  {data: {
    id: 'outA', level: 2 },
    group: 'nodes'
   },
  ....
  {
    data: { source: 'innerA', target: 'outA' },
    group: 'edges',
  },
  ....
  ],
}

和我的布局

layout: {
  concentric: function( node ){
    return node.data("level");
  },
  levelWidth: function( ){
    return 2;
  },
  name: 'concentric',
  minNodeSpacing: 50,
  }
}

根据我期望的布局中的同心函数,将分配节点取决于节点中的图层属性。

希望有人有主意。预先谢谢你。

javascript cytoscape.js
1个回答
0
投票

首先,布局将较高级别的节点向中心放置,因此内部节点应具有2级,而外部节点应具有1级。其次,我不知道levelWidth选项如何工作,但使用默认值而不是2作品。

var cy = window.cy = cytoscape({
  container: document.getElementById('cy'),

  style: [{
      selector: 'node',
      css: {
        'content': 'data(id)'
      }
    },
    {
      selector: 'edge',
      css: {
        'curve-style': 'straight',
      }
    }
  ],
  elements: [
  {data: {
    id: 'innerA', level: 2 },
    group: 'nodes'
  },
  {data: {
    id: 'innerB', level: 2 },
    group: 'nodes'
  },
  {data: {
    id: 'innerC', level: 2 },
    group: 'nodes'
  },
  {data: {
    id: 'innerD', level: 2 },
    group: 'nodes'
  },  
  {data: {
    id: 'outA', level: 1 },
    group: 'nodes'
   },
  {data: {
    id: 'outB', level: 1 },
    group: 'nodes'
   },
  {data: {
    id: 'outC', level: 1 },
    group: 'nodes'
   },
  {data: {
    id: 'outD', level: 1 },
    group: 'nodes'
   },
  {data: {
    id: 'outE', level: 1 },
    group: 'nodes'
   },
  {data: {
    id: 'outF', level: 1 },
    group: 'nodes'
   },
  {data: {
    id: 'outG', level: 1 },
    group: 'nodes'
   },
  {data: {
    id: 'outH', level: 1 },
    group: 'nodes'
   },   
  {
    data: { source: 'innerA', target: 'outA' },
    group: 'edges',
  },
  {
    data: { source: 'innerB', target: 'outC' },
    group: 'edges',
  },
  {
    data: { source: 'innerC', target: 'outE' },
    group: 'edges',
  },
  {
    data: { source: 'innerD', target: 'outG' },
    group: 'edges',
  },  
  ],
  layout: {
    name: 'concentric',
    concentric: function( node ){
      return node.data("level");
    },
    minNodeSpacing: 50
  }  
});
body {
  font: 14px helvetica neue, helvetica, arial, sans-serif;
}

#cy {
  height: 95%;
  width: 95%;
  left: 0;
  top: 0;
  position: absolute;
}
<html>

<head>
  <meta charset=utf-8 />
  <meta name="viewport" content="user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, minimal-ui">
  <script src="https://unpkg.com/[email protected]/dist/cytoscape.min.js">
  </script>
</head>

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

</html>
© www.soinside.com 2019 - 2024. All rights reserved.