Graphviz重叠=正交:水平布局

6

我有一个由graphviz工具制作的无向图(现在我正在使用sfdp):

    digraph structs {
    node [shape=Mrecord, URL="index_new.php?object=\N&overlap=false"];
    overlap = orthoxy;
    bgcolor=transparent;
    splines=true;
    rankdir=TB;
    node [fontname="Arial", fontsize=30, style=filled, fillcolor=chartreuse1, image="../common/img/monitor.png"]struct_swbposad91 [label = "sw-bposad9-1\n192.168.17.141\nC2960 "];
        node [fontname="Arial", fontsize=30, style=filled, fillcolor=chartreuse1, image="../common/img/monitor.png"]struct_swmedikov5fan [label = "sw-medikov5-fan\n192.168.34.134\n "];
        node [fontname="Arial", fontsize=30, style=filled, fillcolor=chartreuse1, image="../common/img/monitor.png"]struct_swlevash131 [label = "sw-levash13-1\n192.168.16.165\nC2960 "];
        node [fontname="Arial", fontsize=30, style=filled, fillcolor=deepskyblue]struct_swpolevsabirov45a [label = "sw-polevsabirov45a\n192.168.18.182\nS2300 "];
...lots of lines goes here...
struct_swkazan71:f450212->struct_swbmorsk181:f450213 [weight=1.2, dir=both, color=black, penwidth=5, arrowhead="empty", arrowtail="odot"];
        struct_swmikh171:f450222->struct_swbotk151:f450223 [weight=1.2, dir=both, color=black, penwidth=1, arrowhead="empty", arrowtail="odot"];
...lots of lines goes here...

这里是完整的代码:http://pastebin.com/P3MKTCm2(非常长,抱歉)。
输出结果如下(部分):

enter image description here

问题:我需要我的图以横向增长而不是纵向增长。是否有任何方法可以获得像图像上那样的布局,但是“旋转”90度?

这看起来像是一个有向图,你的简短示例表明了一个有向图(使用 digraph)。只有当你使用带有有向边 (->) 的 digraph 或者带有无向边 (--) 的 graph 时,sfdp 才会生成输出。不管怎样,如果你发布一个完整的图形以供使用,那将更容易。顺便说一下,在定义节点的 URL 时,我必须删除双引号前面的反斜杠。 - marapet
@marapet,我已经编辑了我的问题,并将所有的点代码放到了Pastebin上。 - k102
2个回答

6

在尝试绘制图形时,做出了以下几点观察:

  • 图形不大,但标记确实是冗余的——我进行了一些修改,以便可以读取它们(如下所示)
  • 用于边缘的端口不存在,graphviz生成了大量警告。虽然仍然会生成输出,但这肯定不是一个好现象。
  • 这是一个有向图——使用digraph->来表示directed graphs
  • overlap=orthoxy似乎已经过时了:

剩下允许的overlap值对应于目前可能会产生糟糕的纵横比的算法。此外,我们不建议使用"ortho*"和"portho*"。

当简单地使用sfdp和overlap=false时,忽略所有警告和缺少的图像,如下所示:

digraph structs {
    overlap=false;
    bgcolor=transparent;
    splines=true;
    rankdir=TB;
    node [shape=Mrecord, URL="index_new.php?object=\N&overlap=false", fontname="Arial", fontsize=30, style=filled, fillcolor=chartreuse1, image="../common/img/monitor.png"];
    struct_swbposad91 [label = "sw-bposad9-1\n192.168.17.141\nC2960 "];
    struct_swmedikov5fan [label = "sw-medikov5-fan\n192.168.34.134\n "];
    struct_swlevash131 [label = "sw-levash13-1\n192.168.16.165\nC2960 "];
    struct_swkant121 [label = "sw-kant12-1\n192.168.19.9\nC3400 "];
    struct_swpolit91 [label = "sw-polit9-1\n192.168.18.102\n8012M "];
    struct_swbotk151 [label = "sw-botk15-1\n192.168.18.36\nC2960 "];
    struct_swmikh171 [label = "sw-mikh17-1\n192.168.18.37\nC2950 "];
    struct_swchapaeva17 [label = "sw-chapaeva17\n192.168.17.136\n8000S "];
    struct_swsamp871 [label = "sw-samp87-1\n192.168.19.7\nC2960 "];
    struct_swlig291 [label = "sw-lig29-1\n192.168.39.133\nC2960 "];
    struct_swbotk152 [label = "sw-botk15-2\n192.168.19.119\nC2960 "];
    struct_swkubin842 [label = "sw-kubin84-2\n192.168.31.131\nI2110A "];
    struct_swpugacheva571 [label = "sw-pugacheva5/7-1\n192.168.37.144\nI2110A "];
    struct_swbposad92 [label = "sw-bposad9-2\n192.168.17.142\nC3550 "];
    struct_swkapitolk177 [label = "sw-kapitol-k177\n192.168.40.134\n "];
    struct_swkapitolk338 [label = "sw-kapitol-k338\n192.168.40.131\n "];
    struct_swbmorsk181 [label = "sw-bmorsk18-1\n192.168.29.132\nC2960 "];
    struct_swpirog171 [label = "sw-pirog17-1\n192.168.18.40\nSuperStack "];
    struct_swkazan71 [label = "sw-kazan7-1\n192.168.19.228\nC2960 "];
    struct_cskazac9brd [label = "cs-kazac9-brd\n192.168.30.251\nCASR1002F "];
    struct_swgrib1261 [label = "sw-grib126-1\n192.168.19.235\nC2960 "];
    struct_swlenin1391 [label = "sw-lenin139-1\n192.168.31.144\nC2960 "];
    struct_swpirog151 [label = "sw-pirog15-1\n192.168.18.42\nI2110A "];
    struct_swrastr21 [label = "sw-rastr2-1\n192.168.36.130\nC2960 "];
    struct_swkazac92 [label = "sw-kazac9-2\n192.168.17.163\nC2960 "];
    struct_swsmolen331 [label = "sw-smolen33-1\n192.168.17.108\nC2950 "];
    struct_swkubin841 [label = "sw-kubin84-1\n192.168.31.134\nS2300 "];
    struct_swkurskaya40 [label = "sw-kurskaya40\n192.168.26.144\nI2110A "];
    struct_swvolkov171 [label = "sw-volkov17-1\n192.168.17.167\nC2960 "];
    struct_swtall71 [label = "sw-tall7-1\n192.168.37.147\nC2960 "];
    struct_swlevash132 [label = "sw-levash13-2\n192.168.16.174\n8000S "];
    struct_swpetrovkosa11 [label = "sw-petrovkosa1-1\n192.168.16.164\nC2950 "];
    struct_swobuh120e1 [label = "sw-obuh120e-1\n192.168.21.131\nC2960 "];
    struct_swkurch101 [label = "sw-kurch10-1\n192.168.18.104\nC2960 "];
    struct_swsamp873 [label = "sw-samp87-3\n192.168.19.57\nC2960 "];
    struct_swengelsa291 [label = "sw-engelsa29-1\n192.168.18.163\nC2960 "];
    struct_swsamp681 [label = "sw-samp68-1\n192.168.19.4\nC2950 "];
    struct_swsamp421 [label = "sw-samp42-1\n192.168.19.2\nS2300 "];
    struct_swbelovod71 [label = "sw-belovod7-1\n192.168.19.12\nS2300 "];
    struct_swoktyabr381 [label = "sw-oktyabr38-1\n192.168.37.149\n8000S "];
    struct_swural11 [label = "sw-ural1-1\n192.168.28.144\nI2110A "];
    struct_swsamp68style [label = "sw-samp68-style\n192.168.19.10\n8012M "];
    struct_swrevol69 [label = "sw-revol69\n192.168.37.141\n "];
    struct_swlig292 [label = "sw-lig29-2\n192.168.39.134\nSuperStack "];
    struct_swkolom331 [label = "sw-kolom33-1\n192.168.18.181\nC2950 "];
    struct_swchernigov15 [label = "sw-chernigov15\n192.168.26.133\nI2110A "];
    struct_swVO9line344 [label = "sw-VO9line34-4\n192.168.28.142\nI2110A "];
    struct_swbmorsk182 [label = "sw-bmorsk18-2\n192.168.29.133\nC2960 "];
    struct_swdom41 [label = "sw-dom4-1\n192.168.18.226\nC2960 "];
    struct_swnevsky301 [label = "sw-nevsky30-1\n192.168.27.135\nC2960 "];
    struct_swobuh116k11 [label = "sw-obuh116k1-1\n192.168.21.132\n "];
    struct_swkapitol1 [label = "sw-kapitol-1\n192.168.40.145\n "];

    node [fontname="Arial", fontsize=30, style=filled, fillcolor=deepskyblue];
    struct_swpolevsabirov45a [label = "sw-polevsabirov45a\n192.168.18.182\nS2300 "];
    struct_swvarshav111 [label = "sw-varshav11-1\n192.168.20.46\nSuperStack "];
    struct_swtrefol2opor [label = "sw-trefol2-opor\n192.168.31.142\nC2960 "];

    node [fontname="Arial", fontsize=30, style=filled, fillcolor=yellow];
    struct_swVO9line341 [label = "sw-VO9line34-1\n192.168.28.137\nC2960 "];
    struct_swkazac91 [label = "sw-kazac9-1\n192.168.17.104\nC2960 "];
    struct_swVO9line345 [label = "sw-VO9line34-5\n192.168.28.143\nI2924GF "];
    struct_swmagn17a2 [label = "sw-magn17a-2\n192.168.37.133\nSuperStack "];
    struct_swpopova23gajot [label = "sw-popova23-gajot\n192.168.34.133\nC3400 "];
    struct_swVO9line343 [label = "sw-VO9line34-3\n192.168.28.138\nC3400 "];
    struct_swmagnit17a1 [label = "sw-magnit17a-1\n192.168.37.130\nC2960 "];
    struct_swknipovich41 [label = "sw-knipovich4-1\n192.168.39.139\nI2126A "];

    edge[weight=1.2, dir=both, color=black, penwidth=1, arrowhead="empty", arrowtail="odot"];
    struct_swtrefol2opor:f450155->struct_swvarshav111:f450156 [color=red, penwidth=5];
    struct_swkazan71:f450212->struct_swbmorsk181:f450213 [penwidth=5];
    struct_swmikh171:f450222->struct_swbotk151:f450223;
    struct_swpirog171:f450230->struct_swbotk151:f450231;
    struct_swbotk152:f450232->struct_swbotk151:f450233;
    struct_swoktyabr381:f450262->struct_swtall71:f450263;
    struct_swvarshav111:f450291->struct_swlenin1391:f450292;
    struct_swkazac92:f450313->struct_swkazac91:f450314;
    struct_swkazac91:f450321->struct_swkazan71:f450322 [penwidth=5];
    struct_swgrib1261:f450323->struct_swkazan71:f450324;
    struct_cskazac9brd:f450333->struct_swkazac91:f450334;
    struct_swlenin1391:f450335->struct_swkazan71:f450336 [penwidth=5];
    struct_cskazac9brd:f450345->struct_swkazac91:f450346;
    struct_swsmolen331:f450347->struct_swkazac91:f450348;
    struct_swbotk151:f450349->struct_swkazac91:f450350 [penwidth=5];
    struct_cskazac9brd:f450351->struct_swkazac91:f450352;
    struct_swrastr21:f450361->struct_swkazac91:f450362 [penwidth=5];
    struct_swlenin1391:f450363->struct_swkazac91:f450364 [penwidth=5];
    struct_swpirog151:f450379->struct_swpirog171:f450380;
    struct_swkurskaya40:f450383->struct_swvolkov171:f450384;
    struct_swkubin841:f450389->struct_swlenin1391:f450390;
    struct_swkubin842:f450403->struct_swkubin841:f450404;
    struct_swVO9line345:f450431->struct_swbposad91:f450432;
    struct_swbposad92:f450435->struct_swbposad91:f450436;
    struct_swchapaeva17:f450441->struct_swbposad92:f450442;
    struct_swmedikov5fan:f450453->struct_swbposad91:f450454 [penwidth=5];
    struct_swbposad91:f450469->struct_swsamp871:f450470 [penwidth=5];
    struct_swdom41:f450473->struct_swsamp871:f450474 [penwidth=5];
    struct_swkurch101:f450477->struct_swsamp871:f450478;
    struct_swsamp873:f450479->struct_swsamp871:f450480;
    struct_swbposad91:f450487->struct_swsamp871:f450488 [penwidth=5];
    struct_swkant121:f450491->struct_swsamp871:f450492;
    struct_swpolit91:f450493->struct_swsamp871:f450494;
    struct_swengelsa291:f450495->struct_swsamp871:f450496 [penwidth=5];
    struct_swsamp681:f450497->struct_swsamp871:f450498;
    struct_swsamp421:f450499->struct_swsamp871:f450500;
    struct_swrastr21:f450539->struct_swbotk151:f450540 [penwidth=5];
    struct_swpolevsabirov45a:f450605->struct_swkolom331:f450606;
    struct_swbelovod71:f450613->struct_swsamp421:f450614;
    struct_swpopova23gajot:f450630->struct_swmedikov5fan:f450631;
    struct_swural11:f450636->struct_swVO9line345:f450637;
    struct_swlig291:f450652->struct_swkazac91:f450653 [penwidth=5];
    struct_swmagn17a2:f450657->struct_swmagnit17a1:f450658;
    struct_swlevash132:f450674->struct_swlevash131:f450675;
    struct_swmedikov5fan:f450678->struct_swlevash131:f450679 [penwidth=5];
    struct_swpetrovkosa11:f450686->struct_swlevash131:f450687;
    struct_swobuh120e1:f450711->struct_swmagnit17a1:f450712 [penwidth=5];
    struct_swtall71:f450713->struct_swmagnit17a1:f450714;
    struct_swpugacheva571:f450721->struct_swmagnit17a1:f450722;
    struct_swobuh120e1:f450751->struct_swlig291:f450752 [penwidth=5];
    struct_swlig292:f450757->struct_swlig291:f450758;
    struct_swknipovich41:f450763->struct_swlig291:f450764;
    struct_swsamp68style:f450777->struct_swsamp681:f450778;
    struct_swrevol69:f450781->struct_swmagnit17a1:f450782;
    struct_swchernigov15:f450827->struct_swsmolen331:f450828;
    struct_swvolkov171:f450835->struct_swsmolen331:f450836;
    struct_swobuh116k11:f450852->struct_swobuh120e1:f450853;
    struct_swmagnit17a1:f450926->struct_swbotk151:f450927 [penwidth=5];
    struct_swnevsky301:f450932->struct_swkazan71:f450933;
    struct_swbmorsk182:f450948->struct_swbmorsk181:f450949;
    struct_swkazan71:f450952->struct_swbmorsk181:f450953 [penwidth=5];
    struct_swbmorsk181:f450972->struct_swVO9line341:f450973 [penwidth=5];
    struct_swVO9line344:f450986->struct_swVO9line341:f450987;
    struct_swVO9line343:f450994->struct_swVO9line341:f450995 [color=Red, penwidth=5];
    struct_swbmorsk181:f450998->struct_swVO9line341:f450999 [penwidth=5];
    struct_swlevash131:f451004->struct_swVO9line341:f451005 [penwidth=5];
    struct_swkapitolk177:f451031->struct_swkapitol1:f451032;
    struct_swkapitolk338:f451033->struct_swkapitol1:f451034;
    struct_swkolom331:f451084->struct_swengelsa291:f451085;
    struct_swdom41:f451086->struct_swengelsa291:f451087 [penwidth=5];
    struct_swVO9line345:f451139->struct_swVO9line341:f451140;
    struct_swsamp871:f451157->struct_swbotk151:f451158 [penwidth=5];
    struct_swVO9line345:f451161->struct_swVO9line341:f451162;
    struct_swbotk151:f451177->struct_swkazac91:f451178 [penwidth=5];
    struct_swsamp871:f451184->struct_swbotk151:f451185 [penwidth=5];
    struct_swkazac91:f451186->struct_swkazan71:f451187 [penwidth=5];
    struct_swVO9line345:f451190->struct_swbposad91:f451191;
}

输入图像描述

这里是带点的相同内容:

输入图像描述


谢谢!是的,我知道未使用的端口:图形有两个选项(带有和不带有端口)。我已经用dot得到了正确的图像(太好了 :)),但无法使sfdp输出看起来像你的。你使用的graphviz版本是什么?并且是否安装了三角测量库? - k102
我需要检查我的另一个盒子,但它肯定是2.29(在Windows上)。我不知道任何三角测量库(?)。 - marapet
当我使用sfdp时,出现了错误: Error: remove_overlap: Graphviz not built with triangulation library (2.28 freeBSD)。虽然它可以工作,但我不知道该怎么做... - k102
如果输出结果不够理想,您可以尝试使用更新的版本。http://www.graphviz.org/Download.php - marapet

1
你尝试过使用 [rankdir=TB] 吗?

http://www.graphviz.org/doc/info/attrs.html#d:rankdir

可能有些东西我没有注意到,因为rankdir=TB应该是默认设置。您的示例图似乎具有rankdir=LR,但您没有提及指定它。(另外,您的图看起来像是一个有向图,但您指出它是无向的。)


这是一个无向图 - 我正在使用sfdp过滤器。 - k102
我已经编辑了我的问题并添加了完整的代码。你还有什么其他的想法吗? - k102

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接