2012-01-24 8 views
3

내 프로그램의 사용자는 계층 적으로 구성됩니다. 각 사용자은 트리의 노드이며 부서 노드 만 다른 노드 유형입니다. 각 노드에는 하나의 상위 노드 (루트 노드)가 있습니다.프로그래밍 방식으로 조직도를 그리는 방법?

graphviz 모음에서 사용할 DOT 파일을 생성했지만 너무 넓기 때문에 결과 그림을 사용할 수 없습니다. 형제 노드가 많은 평면 계층 구조를 가지고 있기 때문에이 프로그램이 내 필요에 맞게 조정될 수 있는지 여부는 알지 못합니다. 아마도이 프로그램을 위해 특별히 설계된 프로그램이 필요합니다. 평평하지 않은 도구를 사용해 보았지만 성공하지 못했습니다.

This is the test dot file

은 -

+0

조직도 (평면 계층 구조)가 완벽하게 배치 된 것처럼 보이는 이유는 무엇입니까? – marapet

+0

당신은 분명 옳았습니다.하지만 저는 그것이 생각할 수있는 것보다 더 영리한 방법, 예를 들어 원으로 배열되기를 바랍니다. – Raffaele

답변

3

귀하의 의견을 바탕으로 다른 레이아웃 알고리즘을 사용하여 보다 빠른 테스트가 있습니다. 당신이 동그라미라고 말했기 때문에, 과 twopi으로 시도했습니다. 줄 바꿈을 삽입 다르게

  • 노드
  • 스타일 사용자부서 일부 색상/모양/스타일/글꼴을 추가

    • :

      나는 테스트 스크립트에 약간의 변화를했습니다 사용자의 이름과 기능 사이에

    긴 부서 이름을 사용하는 경우 두 줄이 도움이 될 것입니다.

    digraph G { 
    overlap=false; 
    splines=true; 
    root="node0"; 
    
    node[colorscheme=paired12, fontsize=11]; 
    node0 [shape=house, label="Organizzazione", style="filled", fillcolor=3, color="4", fontsize=20, height=2, 
    fontname="Times New Roman Bold"]; 
    
    node[shape=doubleoctagon, style=filled, fillcolor=7, color=8, width=3]; 
    node24 [label="C3 TERREMOTO"]; 
    node28 [label="E POLIZIA URBANA E PROTEZIONE CIVILE"]; 
    node14 [label="D1 SERVIZI SCOLASTICI"]; 
    node35 [label="30: PROTOCOLLO ADMIN "]; 
    node18 [label="B ECONOMICO E FINANZIARIO"]; 
    node22 [label="C ASSETTO E TERRITORIO"]; 
    node41 [label="A9 UFFICIO PUBBLICAZIONI"]; 
    node38 [label="C1 TECNICO"]; 
    node31 [label="A AFFARI GENERALI"]; 
    node12 [label="A4 ANAGRAFE E STATO CIVILE"]; 
    node20 [label="B1 TRIBUTI"]; 
    node16 [label="A5 ELETTORALE E LEVA"]; 
    node40 [label="31: PUBBLICAZIONI ALBO UTENTE "]; 
    node26 [label="C2a TECNICO"]; 
    node9 [label="A3 UFFICIO PROTOCOLLO CENTRALE"]; 
    
    node[shape=box, style=filled, fillcolor="1", color="2", width=2]; 
    node0 -> node24; 
    node0 -> node28; 
    node7 [label="14: ROCCO MARINACCIO\nVISUALIZZATORE"]; 
    node0 -> node7; 
    node25 [label="27: FRANCESCO MARINO "]; 
    node26 -> node25; 
    node39 [label="5: CIRO D'EMILIO\nPROTOCOLLATORE"]; 
    node20 -> node39; 
    node4 [label="15: FRANCESCO PAZIENZA\nVISUALIZZATORE"]; 
    node0 -> node4; 
    node3 [label="18: ADRIANA NATALE\nVISUALIZZATRICE"]; 
    node0 -> node3; 
    node42 [label="4: MICHELE ROGATO\nRESP DI REPARTO"]; 
    node18 -> node42; 
    node29 [label="29: FRANCESCO NOTA "]; 
    node28 -> node29; 
    node0 -> node14; 
    node10 [label="12: STEFANO IEFFA "]; 
    node0 -> node10; 
    node13 [label="20: ANTONIO MARINO "]; 
    node14 -> node13; 
    node30 [label="3: PATRIZIA PLATANO\nPROTOCOLLATRICE"]; 
    node31 -> node30; 
    node1 [label="19: PATRIZIA PLATANO "]; 
    node0 -> node1; 
    node37 [label="6: GIUSEPPE CEGLIA\nRESP. DI REPARTO"]; 
    node38 -> node37; 
    node0 -> node35; 
    node0 -> node18; 
    node23 [label="26: PASQUALE RUSSO "]; 
    node24 -> node23; 
    node2 [label="17: MICHELE BICCARINO\nVISUALIZZATORE"]; 
    node0 -> node2; 
    node0 -> node22; 
    node0 -> node41; 
    node11 [label="21: GIUSEPPE DI FLUMERI "]; 
    node12 -> node11; 
    node43 [label="9: ROBERTO CAMPANELLA "]; 
    node0 -> node43; 
    node0 -> node38; 
    node0 -> node31; 
    node0 -> node12; 
    node0 -> node20; 
    node17 [label="23: MICHELE IPPOLITO "]; 
    node18 -> node17; 
    node6 [label="13: ALESSANDRO CAPANO "]; 
    node0 -> node6; 
    node19 [label="24: SALVATORE DOTO "]; 
    node20 -> node19; 
    node15 [label="22: BENVENUTA REA "]; 
    node16 -> node15; 
    node27 [label="28: ANTONIO CAMPANELLA "]; 
    node28 -> node27; 
    node8 [label="11: PASQUALE PALUMBO "]; 
    node9 -> node8; 
    node5 [label="16: PAOLO PIETRO TROCCOLA\nVISUALIZZATORE"]; 
    node0 -> node5; 
    node0 -> node16; 
    node21 [label="25: RAFFAELA COFANO "]; 
    node22 -> node21; 
    node41 -> node40; 
    node32 [label="2: MARIA CRISTINA ANELLI\nVISUALIZZATRICE"]; 
    node0 -> node32; 
    node0 -> node26; 
    node33 [label="10: VINCENZO BOTTICELLI "]; 
    node0 -> node33; 
    node0 -> node9; 
    node36 [label="7: ANTONIETTA STRAZZELLA\nRESP. DI REPARTO"]; 
    node22 -> node36; 
    node34 [label="1: AMBROGIO MASCIA\nAmministratore di sistema"]; 
    node9 -> node34; 
    node44 [label="8: MARIANO LAUDISI\nVISUALIZZATORE"]; 
    node0 -> node44; 
    } 
    

    아마도 이미지를 열고 원래 크기로보아야 할 것입니다.

    Twopi 레이아웃 :

    graphviz output - twopi

    Circo 레이아웃 : 당신이 부서는 부서에 연결, 또는 많은 사용자의 경우

    graphviz output - circo

    가 circo 레이아웃은 아마 더 적합 할 수있다 한 부서.

  • +0

    이러한 제안에 감사드립니다. 나는 이미 그 명령을 시도하고 마침내 부서별로 사용자를 그룹화하여 단일 상자에 넣기로 결정했습니다. 이 방법은 데이터베이스가 평범하지 않을 때 그래프를 읽기가 어렵습니다. 나는 결과 이미지를 가능한 빨리 게시 할 것이다. – Raffaele

    4

    도트 언어를 더 즐겁게 만들기 위해 이미지를 수정하는 미묘한 방법을 많이 가지고 ... 내 프로그램은 종종 10 배이 데이터를 사용하고 있습니다. 몇 분 후에 dot guide을 훑어보세요. 페이지의 X/Y 비율, 노드의 반발력 및 레이아웃으로부터 거의 모든 측면에서 제약 조건을 설정할 수 있습니다.

    graphviz에서 사용할 수있는 contrib 패키지 중 하나는 GVEdit입니다. GVEdit은 그래프를 편집하는 하나의 창인 'go'를 클릭하고 다른 창으로 렌더링합니다. 예쁘게 만드는 훌륭한 즉석 피드백 방법.

    +0

    그래프는 프로그래밍 방식으로 생성되므로 픽셀이 완벽 할 필요는 없습니다. (다이어그램 IMHO의 아주 단순한 종류) – Raffaele

    +2

    오른쪽 - 내가 제안하고있는 것은 레이아웃의 여러 측면을 이해하는 것입니다. GVEdit을 사용할 수 있습니다 - 일단 당신이 올바른 크기를 얻는 속성 설정을 손질하면/레이아웃 - 프로그래밍 방식으로 생성 된 그래프에 적용 할 템플릿으로 사용할 수 있습니다. – synthesizerpatel

    관련 문제