如何以编程方式绘制组织结构图?

时间:2012-01-24 08:26:57

标签: graphics diagram graphviz

我的程序用户按层次结构组织。每个用户是树中的节点,唯一的其他类型的节点是部门节点。每个节点都有一个且只有一个父节点(可能是根节点)。

我生成了一个由graphviz套件使用的DOT文件,但结果图片不可用,因为它太宽了。我不知道这个程序是否可以调整以满足我的需要,因为我有一个包含大量兄弟节点的平面层次结构,所以也许我需要一个专门为此设计的程序(或者自己编写)。我尝试了无法使用的工具,但没有成功。

This is the test dot file - 请注意,我的程序经常使用10倍数据......

2 个答案:

答案 0 :(得分:4)

点语言有许多微妙的方法来修改图像,使其更令人愉悦。花几分钟时间浏览dot guide。您可以根据页面的X / Y比率,节点的排斥和布局来设置几乎任何方面的约束。

graphviz提供的其中一个贡献包是GVEdit,它是一个链接到graphviz库的小Qt应用程序 - 一个用于编辑图形的窗口,点击'go'并且它将渲染到另一个窗口。制作漂亮的即时反馈方法。

答案 1 :(得分:3)

根据您的评论,这是使用除 dot 之外的其他布局算法的快速测试。既然您说 circle ,我尝试使用 circo 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

如果您将部门链接到部门或部门中的许多用户,那么圆形布局可能更合适。