2014-03-13 39 views
0

我在Mediawiki网站内部使用GraphViz,这意味着我无法在svg文件上工作(不幸)。 我创造了这个图形GraphViz创建常规边缘

digraph GPPubProcess{ 
rankdir="TB"; 
node [shape = box fontsize=10]; 
edge [fontsize=10]; 
graph[size="7.75,10.25" overlap = false]; 

subgraph c2 { 
    rank="same"; 
    N02 [label="Two?" shape=hexagon margin=0]; 
    N03 [label="Three"]; 
} 

subgraph c4 { 
    rank="same"; 
    N07 [label="Seven"]; 
    N06 [label="Six?" shape=hexagon margin=0]; 
    N05 [label="Five"]; 
} 

subgraph c8 { 
    rank="same"; 
    N11 [label="Eleven)" shape=hexagon margin=0]; 
    N12 [label="Twelve"]; 
} 

subgraph c9 { 
    rank="same"; 
    N13 [label="Thirteen?" shape=hexagon margin=0]]; 
    N14 [label="Fourteen"]; 
N17 [label="COMPLETED"]; 
} 

N00 [shape=point]; 
N01 [label="One"]; 
N02 [label="Two?" shape=hexagon margin=0]; 
N04 [label="Four?" shape=hexagon margin=0]; 
N08 [label="Eight"]; 
N09 [label="Nine"]; 
N10 [label="Ten?" shape=hexagon margin=0]; 
N99 [shape=point]; 
N00->N01:n; 
N01:s->N02:n; 
N02:s->N04:n [label=" yes"]; 
N04:s->N05:n [label=" no" weight=30]; 
N05:s->N08:n [weight=30]; 
N08:s->N09:n [weight=30]; 
N09:s->N10:n [weight=30]; 
N10:s->N11:n [label=" no" weight=30]; 
N11:s->N17:n [label=" no"]; 
N17:s->N99; 

N02 -> N03 [weight=0]; 
N04:e -> N06:n [label=" yes"]; 
N06 -> N05 [label=" no"] [weight=0]; 
N06 -> N07 [label=" yes"]; 
N10:e -> N06:s [label=" yes" weight=5]; 
N03:s -> N07:n; 
N07:e -> N09:e [weight=0]; 

N11:e -> N12:w; 

N15 [label="Fifteen"]; 
N16 [label="Sixteen"]; 

N12:s->N13:n [weight=5]; 
N13:s->N15:n [label=" no"]; 
N15:s->N16:n; 

N13:e->N14:w [label=" yes" weight=5]; 

N14:n->N07:s; 

N16:w->N05:w [weight=0]; 

} 

产生几乎什么我都喜欢,但链接sixteen->五,ten->六thirteen-> 14让很多节点之间激流回旋的。有没有办法让他们正规化?

此外,六到五之间的联系朝着错误的方向发展,但我无法做到正确吗?有什么窍门吗?

非常感谢。

乔治

回答

0

我会通过移除weight和指南针点开始的指令(N,:即:S,:W)。这些迫使dot做出一些奇怪的决定,特别是指南针点。如果您需要对默认版本进行更改,请一次进行一项小改动。不幸的是,你试图强制点做一个特定的图表,它往往得到的怪异。

由于您无法使用SVG,因此在某些时候您必须放弃准确获取所需的图形并接受点创建的图形。有多少你可以强制点的限制。

六到五之间的联系(N06 -> N05)应该有箭头从六到五。如果您看到指向六的箭头,我认为这是早期版本Graphviz中的一个错误。尝试更新到最新版本。

此代码:

digraph GPPubProcess{ 
    rankdir="TB"; 
    node [shape = box fontsize=10]; 
    edge [fontsize=10]; 
    graph[size="7.75,10.25" overlap = false]; 

    subgraph c2 { 
     rank="same"; 
     N02 [label="Two?" shape=hexagon margin=0]; 
     N03 [label="Three"]; 
    } 

    subgraph c4 { 
     rank="same"; 
     N07 [label="Seven"]; 
     N06 [label="Six?" shape=hexagon margin=0]; 
     N05 [label="Five"]; 
    } 

    subgraph c8 { 
     rank="same"; 
     N11 [label="Eleven)" shape=hexagon margin=0]; 
     N12 [label="Twelve"]; 
    } 

    subgraph c9 { 
     rank="same"; 
     N13 [label="Thirteen?" shape=hexagon margin=0]; 
     N14 [label="Fourteen"]; 
     N17 [label="COMPLETED"]; 
    } 

    N00 [shape=point]; 
    N01 [label="One"]; 
    N02 [label="Two?" shape=hexagon margin=0]; 
    N04 [label="Four?" shape=hexagon margin=0]; 
    N08 [label="Eight"]; 
    N09 [label="Nine"]; 
    N10 [label="Ten?" shape=hexagon margin=0]; 
    N99 [shape=point]; 
    N00->N01; 
    N01->N02; 
    N02->N04 [label=" yes"]; 
    N04->N05 [label=" no"]; 
    N05->N08; 
    N08->N09; 
    N09->N10; 
    N10->N11 [label=" no"]; 
    N11->N17 [label=" no"]; 
    N17->N99; 

    N02 -> N03; 
    N04 -> N06 [label=" yes"]; 
    N06 -> N05 [label=" no"]; 
    N06 -> N07 [label=" yes"]; 
    N10 -> N06 [label=" yes"]; 
    N03 -> N07; 
    N07 -> N09; 

    N11 -> N12; 

    N15 [label="Fifteen"]; 
    N16 [label="Sixteen"]; 

    N12->N13; 
    N13->N15 [label=" no"]; 
    N15->N16; 

    N13->N14 [label=" yes"]; 
    N14->N07; 

    N16->N05; 

} 

创建此图:

no constraints

加入[constraint=false]N06 -> N05有助于消除各地N06交叉,但随后推N11和N17的方式到左侧:

with constraint

+0

谢谢,史蒂夫,这帮了很多!有没有办法让页面的一侧更加重要,比如向左走?所以箱子在那边对齐。 – GIMBorgo

+0

我没有办法知道,但我仍然是一位GraphViz初学者。 – SSteve

+0

@GIMBorgo这看起来像一个UML活动图。在GraphViz之上运行的PlantUML支持以下图表:http://plantuml.com/activity2.html#simple您甚至可以在MediaWiki:https://www.mediawiki中使用它。组织/维基/扩展:PlantUML – Fuhrmanator