2012-01-24 69 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