Graphviz:如何旋转节点(或子图)?

时间:2010-12-23 00:22:52

标签: rotation graphviz subgraph

我试图让一个节点(或一个子图,包围一个节点 - 无论哪个可能/更容易)旋转,如下图所示:

desired rotated node effect

请注意,如果旋转“B”标签对我来说无关紧要 - 只有记录中的'verti- *'文本[或者更确切地说,整个记录节点]如图所示旋转

然而,我最接近的是以下dot代码:

digraph graphname {
    node [fontname=Monospace, fontsize=14]; 
    subgraph clusterMasterBox {
        node [shape=record];
        l1 [label = "{ horiz-1 \r| \
 horiz-2 \r| \
 horiz-3 \r| \
 horiz-4 \r} \
"];
        subgraph clusterSubRotateBox {
            rotate=90;
            node [shape=record,rotate=90];
            l2 [label = "{ verti-1 \r| \
 verti-2 \r| \
 verti-3 \r| \
 verti-4 \r} \
"];     
            label="B";
        }
    label="A"
    }
}

我拥有subgraph clusterSubRotateBox的唯一原因(以及它嵌套在clusterMasterBox内的唯一原因)是因为我希望我可以为它分配旋转,但显然我不能 - 如上面的代码生成了这个图像:

gviz rotate actual

所以我的问题是 - 有没有办法旋转记录节点;如果不是单独的,那么可能作为子图的一部分(或者另一种“对象”)?

提前感谢任何建议,
干杯!

3 个答案:

答案 0 :(得分:4)

如果要旋转单个基于记录的节点,则 rankdir 将起作用。我为我的图表试了一下,

digraph plugnoid {
    rankdir=LR;
    node[shape=Mrecord];
    plugnoid [label="swarm| {<load0> onLoad|<plugin0> Plugin|<quit0> onQuit}|{<run0>run|<rehash0>rehash}"];}

enter image description here

rankdir可以具有值 LR RL TB (默认值)。当我将rankdir更改为TB时,输出发生了变化,

enter image description here

您可能需要在图表上试用它们以获得所需的结果。我经历过,当我使用子图并设置不同的rankdir时,结果不是那么好。有关详细信息,请参阅http://www.graphviz.org/doc/info/shapes.html#record

答案 1 :(得分:3)

应该有&#34;旋转&#34;图形对象上的属性(请参阅http://www.graphviz.org/doc/info/attrs.html#drotation)但它在我的测试中没有做任何事情。并且,它仅适用于根据文档的整个图形(不是簇/子图)。 我猜您首先将子图渲染为postscript,然后将其作为单个占位符节点的自定义形状包含在最终图形中。如果你不能得到&#34;轮换&#34;要做到这一点,肯定后记有一个简单的方法来应用变换(在这种情况下是旋转),可能就像为生成的代码添加一些坐标定义前缀一样简单。对不起,我现在没有时间尝试。

答案 2 :(得分:2)

对于单个节点,有orientation属性。我刚用过

node[shape=hexagon, orientation=30]

制作一个顶部有点而不是平顶的六边形。

不幸的是,似乎没有对“记录”类型起作用: - (