2012-01-24 128 views
3

我的程序的用戶是按層次組織的。每個用戶是樹中的一個節點,唯一的其他類型節點是部門節點。每個節點只有一個父節點(可能是根節點)。如何以編程方式繪製組織結構圖?

我生成了一個由graphviz套件使用的DOT文件,但生成的圖片由於太寬而無法使用。我不知道這個程序是否可以根據我的需要進行調整,因爲我有一個扁平的層次結構,有很多兄弟節點,所以也許我需要一個專門爲此設計的程序(或者寫自己的程序)。我嘗試了一個不成功的工具,但沒有成功。

This is the test dot file - 注意,我的程序通常使用10倍的此數據...

+0

什麼_should_像這樣的組織結構圖(平面層次結構)看起來像是完全展開了嗎? – marapet

+0

你當然是對的,但我希望它以比我想象的更聰明的方式安排,例如一個圓圈。 – Raffaele

回答

3

根據您的評論,此處使用以外的其他佈局算法進行快速測試。既然你說,我試用circotwopi

我不得不做出的測試腳本的一些細微變化:

  • 添加一些顏色/形狀/風格/ FONT
  • 風格用戶部門節點不同
  • 插入新行名稱和用戶之間的功能

將長部門名稱放在兩條線可能也有幫助。

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

奇技佈局:

graphviz output - circo

,如果您有部門掛鉤部門,或者有很多用戶的圓環佈局很可能是更合適一個部門。

+0

感謝您提出這些建議。我已經嘗試了這些命令,並最終決定按部門對用戶進行分組,以便它們適合一個盒子。這種方式仍然很難在數據庫不重要時讀取圖表。我會盡快發佈結果圖片 – Raffaele

4

的點語言有很多微妙的方式來修改圖像,使其更加賞心悅目。請抽出幾分鐘並瀏覽dot guide。您可以從頁面的X/Y比率,節點的斥力和佈局幾乎任何方面設置約束。

graphviz提供的一個contrib包是GVEdit,它是一個小的Qt應用程序,鏈接到graphviz庫 - 一個窗口編輯圖形,點擊'去',它會渲染到另一個窗口。偉大的即時反饋方法使事情變得非常漂亮

+0

該圖形將以編程方式生成,因此它不需要像素完美。只是可用的(也是,這是一個非常簡單的圖IMHO) – Raffaele

+2

正確的 - 我建議的是,要了解佈局的不同方面,你可以使用GVEdit - 一旦你確定屬性設置,讓你獲得正確的尺寸/佈局 - 然後您可以將它們用作應用程序生成的圖形的模板。 – synthesizerpatel