相当于 graphviz 中聚类的“xlabel”?

问题描述 投票:0回答:1

DOT 代码

digraph {
    newrank=true;

    {
        node [shape=box]
        edge [dir=none, style=dotted]
        
        A -> B
        B -> C
        C -> D
    }

    Aa;Ab
    subgraph cluster_0 {   
        label="subgraph"
        Ba;Bb
    }
    Ca;Cb [xlabel="xlabel Cb"]

    { rank=same; A; Aa; Ab}
    { rank=same; B; Ba; Bb}
    { rank=same; C; Ca; Cb}
    { rank=same; D; }
}

(感谢welgrivdubek

生成

.

我们可以看到第一条边显示 6.5 个点,而另外两条边显示 5.5 个点,因为集群的标签“子图”正在影响其他节点的定位,可能是因为 GZ 内部将其视为某种节点。

这很烦人,我只想让节点影响节点,而不是集群标签。

Node Cb 的 xlabel 不会这样做。

xlabel 不适用于簇,仅适用于边和节点

对于簇来说,是否有某种相当于 xlabel 的东西?或者比下面的更好的选择。

已知的解决方法选项:

  1. 使用节点xlabel来模拟集群标签。注意,不能手动定位。
  2. 使用节点标签,用
    lp
    放置。 示例。
  3. 对所有右侧节点进行聚类,然后将聚类的
    pencolor
    label
    属性分别设置为 invis 和空白(所需节点除外)。
label graph-theory graphviz
1个回答
0
投票

执行#3的一种可以说更干净的方法是将每组节点放入一个集群中,但设置 peripheries=0 而不是摆弄 pencolor

在一个集群上使用 margin 属性。但请注意,集群周围的盒子在各个方面都更加舒适

digraph {
    newrank=true;

    {
        node [shape=box]
        edge [dir=none, style=dotted]
        
        A -> B
        B -> C
        C -> D
    }
    subgraph cluster_00 {
      margin=2
        label="subgraph"
        Aa;Ab
    }

    subgraph cluster_0 {
    margin=2
        label="subgraph"
        Ba;Bb
    }
    Ca;Cb [xlabel="xlabel Cb"]

    { rank=same; A; Aa; Ab}
    { rank=same; B; Ba; Bb}
    { rank=same; C; Ca; Cb}
    { rank=same; D; }
}

给予:

© www.soinside.com 2019 - 2024. All rights reserved.