cytoscape.js에서 그리드 레이아웃을 사용하는 동안 복합 노드가 겹칩니다.

매디 89

복합 노드가있는 계층 구조를 표시해야하는 시각화 프로젝트에 cytoscape.js를 사용하고 있습니다.

그래서 처음에는 매력처럼 작동 하는 Cose-Bilkent 레이아웃을 사용 했지만 요구 사항은 부모의 모든 자식 노드가 단일 행에 있어야한다는 것입니다. 그래서 약간 조정하려고했지만 정확한 결과를 얻지 못했습니다.

그런 다음 하드 코딩 된 행 및 열 번호 를 제공하여 그리드 레이아웃을 사용하려고했는데 정확한 결과를 얻었지만 내 데이터가 동적이기 때문에 행 번호와 열 번호를 직접 할당하는 것이 어렵다는 것을 깨달았습니다.

내가 사용한 데이터는 다음과 같습니다.

elements: [ // list of graph elements to start with
            { // node a
                data: { id: 'X1', label: 'X1'}
            },
            {
                data: { id: 'X2', label: 'X2'}
            },
            {
                data: { id: 'X3', label: 'X3'}
            },
            {
                data: { id: 'X4', label: 'X4'}
            },
            {
                data: { id: 'X5', label: 'X5'}
            },
            {
                data: { id: 'X6', label: 'X6'}
            },
            {
                data: { id: 'X7', label: 'X7'}
            },
            {
                data: { id: 'X8', label: 'X8'}
            },
            {
                data: { id: 'X9', label: 'X9'}
            },
            {
                  data: { id: 'X10', label: 'X10'}
            },
            {
                data: { id: 'X1e1',label: 'e1', parent: 'X1', row: '1' ,col: '1'}
            },
            {
                data: { id: 'X1e5',label: 'e5', parent: 'X1', row: '1',col: '2'}
            },
            {
                data: { id: 'X1e6',label: 'e6', parent: 'X1', row: '1',col: '3'}
            },
            {
                data: { id: 'X2e2',label: 'e2', parent: 'X2', row: '3',col: '1'}
            },
            {
                data: { id: 'X2e3',label: 'e3', parent: 'X2', row: '3',col: '2'}
             },
            {
                data: { id: 'X3e4',label: 'e4', parent: 'X3', row: '4',col: '1'}
            },
            {
                data: { id: 'X4e5',label: 'e5', parent: 'X4', row: '2',col: '1'}
            },
            {
                data: { id: 'X4e6',label: 'e6', parent: 'X4', row: '2',col: '2'}
            },
            {
                data: { id: 'X5e7',label: 'e7', parent: 'X5', row: '7',col: '1'}
            },
            {
                data: { id: 'X6e8',label: 'e8', parent: 'X6', row: '5',col: '1'}
            },
            {
                data: { id: 'X6e9',label: 'e9', parent: 'X6', row: '5',col: '2'}
            },
            {
                data: { id: 'X7e10',label: 'e10', parent: 'X7', row: '7',col: '2'}
            },
            {
                data: { id: 'X7e11',label: 'e11', parent: 'X7', row: '7',col: '3'}
            },
            {
                data: { id: 'X7e12',label: 'e12', parent: 'X7', row: '7',col: '4'}
            },
            {
                data: { id: 'X8e13',label: 'e13', parent: 'X8', row: '6',col: '1'}
            },
            {
                data: { id: 'X8e14',label: 'e14', parent: 'X8', row: '6',col: '2'}
            },
            {
                data: { id: 'X8e15',label: 'e15', parent: 'X8', row: '6',col: '3'}
            },
            {
                data: { id: 'X8e16',label: 'e16', parent: 'X8', row: '6',col: '4'}
            },
            {
                data: { id: 'X9e17',label: 'e17', parent: 'X9', row: '8',col: '1'}
            },
            {
                data: { id: 'X10e18',label: 'e18', parent: 'X10', row: '8',col: '2'}
            },
            {
                data: { id: 'X1e5X4e5', source:'X1e5', target:'X4e5'}
            },
            {
                data: { id: 'X1e6X4e6', source:'X1e6', target:'X4e6'}
            },
            {
                data: { id: 'X1e1X2', source:'X1e1', target:'X2'}
            },
            {
                data: { id: 'X2e3X3', source:'X2e3', target:'X3'}
            },
            {
                data: { id: 'X4e5X5', source:'X4e5', target:'X5'}
            },
            {
                data: { id: 'X4e6X6', source:'X4e6', target:'X6'}
            },
            {
                data: { id: 'X6X8e16', source:'X6', target:'X8e16'}
            },
            {
                data: { id: 'X6e9X8', source:'X6e9', target:'X8'}
            },
            {
                data: { id: 'X6e8X7', source:'X6e8', target:'X7'}
            },
            {
                data: { id: 'X6X7e12', source:'X6', target:'X7e12'}
            }
        ]

및 레이아웃

layout:{
            name: 'grid',
            fit: true,
            position: function( node ){ return {row:node.data('row'), col:node.data('col') }} 
        }

그리고 여기에 수동 행과 열을 설정하여 얻은 결과가 있습니다.

필수 시각화 이미지

어떤 도움을 주시면 감사하겠습니다. 감사

스테판 T.

필요한 것을 얻을 수있는 두 가지 확장이 있습니다.

우연히도, 둘 다 같은 사람에게서 나왔으므로 전혀 문제가되지 않습니다. 여기서해야 할 일은 애플리케이션이 예제처럼 보이도록 올바른 스타일을 적용하는 것입니다.

document.addEventListener("DOMContentLoaded", function() {
  var cy = (window.cy = cytoscape({
    container: document.getElementById("cy"),
    layout: {
      name: "evenParent"
    },
    style: [{
        selector: "node",
        style: {
          "content": "data(id)",
          "background-color": "#ad1a66"
        }
      },
      {
        selector: ":parent",
        style: {
          "background-opacity": 0.333
        }
      },
      {
        selector: "edge",
        style: {
          width: 3,
          "line-color": "#ad1a66"
        }
      },
      {
        selector: "edge.meta",
        style: {
          width: 2,
          "line-color": "red"
        }
      },
      {
        selector: ":selected",
        style: {
          "border-width": 3,
          "border-color": "#DAA520"
        }
      }
    ],
    elements: {
      nodes: [{
          data: {
            id: "Jerry",
            name: "Jerry"
          }
        },
        {
          data: {
            id: "Elaine",
            name: "Elaine"
          }
        },
        {
          data: {
            id: "Kramer",
            name: "Kramer"
          }
        },
        {
          data: {
            id: "George",
            name: "George"
          }
        },
        {
          data: {
            id: "Martin",
            name: "Martin"
          }
        },
        {
          data: {
            id: "Philippe",
            name: "Philippe"
          }
        },
        {
          data: {
            id: "Louis",
            name: "Louis"
          }
        },
        {
          data: {
            id: "Genevieve",
            name: "Genevieve"
          }
        },
        {
          data: {
            id: "Leo",
            name: "Leo"
          }
        },
        {
          data: {
            id: "Larry",
            name: "Larry"
          }
        },
        {
          data: {
            id: "Logaina",
            name: "Logaina"
          }
        }
      ],
      edges: [{
          data: {
            source: "Jerry",
            target: "Elaine"
          }
        },
        {
          data: {
            source: "Jerry",
            target: "Kramer"
          }
        },
        {
          data: {
            source: "Jerry",
            target: "George"
          }
        },
        {
          data: {
            source: "Elaine",
            target: "Martin"
          }
        },
        {
          data: {
            source: "Elaine",
            target: "Philippe"
          }
        },
        {
          data: {
            source: "Elaine",
            target: "Louis"
          }
        },
        {
          data: {
            source: "Elaine",
            target: "Genevieve"
          }
        },
        {
          data: {
            source: "Elaine",
            target: "Leo"
          }
        },
        {
          data: {
            source: "Kramer",
            target: "Larry"
          }
        },
        {
          data: {
            source: "Kramer",
            target: "Logaina"
          }
        }
      ]
    }
  }));

  // demo your collection ext
  cy.nodes().noOverlap({
    padding: 5
  });
});
body {
  font: 14px helvetica neue, helvetica, arial, sans-serif;
}

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

<head>
  <script src="https://unpkg.com/cytoscape/dist/cytoscape.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/cytoscape-even-parent.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/cytoscape-no-overlap.min.js"></script>
</head>

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

</html>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

cytoscape.js를 사용하여 복합 노드의 레이아웃을 저장하고 복원하는 방법

분류에서Dev

cytoscape.js cose 레이아웃 노드 겹침

분류에서Dev

Android는 그리드 레이아웃에 여러 조각을 추가합니다.

분류에서Dev

Qt에서 hide () 또는 setVisible (false)을 사용하는 동안 자식 그리드 레이아웃이 모든 것을 중앙에 배치하지 못하게하려면 어떻게해야합니까?

분류에서Dev

cytoscape.js를 사용하여 노드 탭에서 css 클래스를 cytoscape 노드에 동적으로 추가

분류에서Dev

cytoscape.js-다른 소스에서 동일한 노드의 속성을 병합하는 방법

분류에서Dev

Interface Builder / Storyboards에서 자동 레이아웃을 사용하여 그리드 유형 레이아웃 생성

분류에서Dev

그리드에서 반복 레이아웃을 구축하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

안녕! CSS 그리드 레이아웃을 변경하는 버튼을 만들려고합니다.

분류에서Dev

자동 레이아웃보기가 더 작은 장치에서 겹칩니다.

분류에서Dev

그리드 정렬을 사용하여 한 페이지에 두 개의 그래프를 레이아웃하는 데 도움이 필요합니다.

분류에서Dev

"조정> 키보드 및 마우스> 추가 레이아웃 옵션> Alt / Win 키 동작"에서 "사용 안함"옵션은 무엇을 의미합니까?

분류에서Dev

CSS 그리드 레이아웃을 사용하여 껍질 암호 옆에있는 "확인란"을 이동하는 방법은 무엇입니까?

분류에서Dev

kivy의 그리드 레이아웃에서 위젯 색상을 동적으로 변경하고 싶습니다.

분류에서Dev

자동 레이아웃을 사용하는 확장 가능한 UITableView 셀은 UIViewAlertForUnsatisfiableConstraints에서 발생합니다.

분류에서Dev

사용자가 노드를 이동 한 후 Dash / Cytoscape에서 노드의 위치를 어떻게 찾을 수 있습니까?

분류에서Dev

그리드 열이 겹칩니다.

분류에서Dev

MDL jquery : 레이블이 내용을 입력 필드에 겹칩니다.

분류에서Dev

R을 사용하여 하나의 레이아웃 / 페이스 / 그리드 내부에 4 개의 맵 (2 * 2)을 플로팅하는 동안 "Plot.new () 오류 : 플롯 영역이 너무 큽니다."

분류에서Dev

사용자 NSContacts가있는 친구 찾기 페이지가 매우 느림 + "이 애플리케이션은 백그라운드 스레드에서 자동 레이아웃 엔진을 수정하고 있습니다."

분류에서Dev

C ++의 연결 목록에 새 노드를 추가하는 동안 프로그램이 충돌합니다.

분류에서Dev

미디어 쿼리가 CSS 그리드 레이아웃에서 작동하지 않습니다.

분류에서Dev

Cytoscape.js 2.6 버전에서 사용자 지정 레이아웃을 추가하는 방법

분류에서Dev

CSS 그리드 레이아웃에서 겹치는 행

분류에서Dev

다중 열 레이아웃을 사용하는 동안 사이드 바 그룹 레이블을 숨기는 방법 Sublime Text 3

분류에서Dev

이 애플리케이션은 백그라운드 스레드에서 자동 레이아웃 엔진을 수정하고 있습니다.

분류에서Dev

HTML 드롭 다운 메뉴에서 YouTube 동영상이 겹칩니다.

분류에서Dev

D3 js 라인이 노드와 겹칩니다.

분류에서Dev

그리드 레이아웃-Flexbox를 사용하여 가능합니까?

Related 관련 기사

  1. 1

    cytoscape.js를 사용하여 복합 노드의 레이아웃을 저장하고 복원하는 방법

  2. 2

    cytoscape.js cose 레이아웃 노드 겹침

  3. 3

    Android는 그리드 레이아웃에 여러 조각을 추가합니다.

  4. 4

    Qt에서 hide () 또는 setVisible (false)을 사용하는 동안 자식 그리드 레이아웃이 모든 것을 중앙에 배치하지 못하게하려면 어떻게해야합니까?

  5. 5

    cytoscape.js를 사용하여 노드 탭에서 css 클래스를 cytoscape 노드에 동적으로 추가

  6. 6

    cytoscape.js-다른 소스에서 동일한 노드의 속성을 병합하는 방법

  7. 7

    Interface Builder / Storyboards에서 자동 레이아웃을 사용하여 그리드 유형 레이아웃 생성

  8. 8

    그리드에서 반복 레이아웃을 구축하는 가장 좋은 방법은 무엇입니까?

  9. 9

    안녕! CSS 그리드 레이아웃을 변경하는 버튼을 만들려고합니다.

  10. 10

    자동 레이아웃보기가 더 작은 장치에서 겹칩니다.

  11. 11

    그리드 정렬을 사용하여 한 페이지에 두 개의 그래프를 레이아웃하는 데 도움이 필요합니다.

  12. 12

    "조정> 키보드 및 마우스> 추가 레이아웃 옵션> Alt / Win 키 동작"에서 "사용 안함"옵션은 무엇을 의미합니까?

  13. 13

    CSS 그리드 레이아웃을 사용하여 껍질 암호 옆에있는 "확인란"을 이동하는 방법은 무엇입니까?

  14. 14

    kivy의 그리드 레이아웃에서 위젯 색상을 동적으로 변경하고 싶습니다.

  15. 15

    자동 레이아웃을 사용하는 확장 가능한 UITableView 셀은 UIViewAlertForUnsatisfiableConstraints에서 발생합니다.

  16. 16

    사용자가 노드를 이동 한 후 Dash / Cytoscape에서 노드의 위치를 어떻게 찾을 수 있습니까?

  17. 17

    그리드 열이 겹칩니다.

  18. 18

    MDL jquery : 레이블이 내용을 입력 필드에 겹칩니다.

  19. 19

    R을 사용하여 하나의 레이아웃 / 페이스 / 그리드 내부에 4 개의 맵 (2 * 2)을 플로팅하는 동안 "Plot.new () 오류 : 플롯 영역이 너무 큽니다."

  20. 20

    사용자 NSContacts가있는 친구 찾기 페이지가 매우 느림 + "이 애플리케이션은 백그라운드 스레드에서 자동 레이아웃 엔진을 수정하고 있습니다."

  21. 21

    C ++의 연결 목록에 새 노드를 추가하는 동안 프로그램이 충돌합니다.

  22. 22

    미디어 쿼리가 CSS 그리드 레이아웃에서 작동하지 않습니다.

  23. 23

    Cytoscape.js 2.6 버전에서 사용자 지정 레이아웃을 추가하는 방법

  24. 24

    CSS 그리드 레이아웃에서 겹치는 행

  25. 25

    다중 열 레이아웃을 사용하는 동안 사이드 바 그룹 레이블을 숨기는 방법 Sublime Text 3

  26. 26

    이 애플리케이션은 백그라운드 스레드에서 자동 레이아웃 엔진을 수정하고 있습니다.

  27. 27

    HTML 드롭 다운 메뉴에서 YouTube 동영상이 겹칩니다.

  28. 28

    D3 js 라인이 노드와 겹칩니다.

  29. 29

    그리드 레이아웃-Flexbox를 사용하여 가능합니까?

뜨겁다태그

보관