9

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

所需的旋转节点效果

请注意,“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 实际旋转

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

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

4

3 回答 3

7

如果您想旋转基于单个记录的节点,那么rankdir将起作用。我为我的图表尝试了它,

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

在此处输入图像描述

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

在此处输入图像描述

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

于 2014-07-16T07:03:39.813 回答
5

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

node[shape=hexagon, orientation=30]

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

不幸的是,似乎不适用于“记录”类型:-(

于 2017-08-01T07:00:54.893 回答
4

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

于 2011-04-15T14:42:14.940 回答