【问题标题】:Problem with "rank=same" in subgraphs and clusters子图和集群中“rank=same”的问题
【发布时间】:2019-04-07 17:09:46
【问题描述】:

当从“正常”子图切换到集群时,rank=same 似乎不再起作用。

要显示我的问题,请查看以下示例图。

digraph INV_X1 {
    rankdir = "LR";
    edge [penwidth="2"];

/* Component styles */
    M_i_0 [shape=none;image="res/nmos.jpg"];
    M_i_1 [shape=none;image="res/pmos.jpg"];

/* Node styles */
    A [style=filled;color=green];
    ZN [style=filled;color=green];

/* Connections */
    M_i_0:n -> ZN;
    A -> M_i_0:w;
    /* Put M_i_0 and _VSS_0 on the same rank. */
    subgraph g_VSS_0 {
        rank=same;
        label="_VSS_0";
        _VSS_0 [shape=none;image="res/gnd.jpg";label=""];
        M_i_0 -> _VSS_0 [arrowhead=none];
    }
    M_i_1:s -> ZN;
    A -> M_i_1:w;
    /* Put M_i_1 and _VDD_1 on the same rank. */
    subgraph g_VDD_1 {
        rank=same;
        label="_VDD_1";
        _VDD_1 [shape=none;image="res/pwr.jpg";label=""];
        _VDD_1 -> M_i_1 [arrowhead=none];
    }
}

输出如下图所示。我希望它不会太混乱,因为我使用了一些图像作为节点。我创建了两个子图来分别对两个节点进行分组并将它们放在同一等级上。一个子图在中心顶部,另一个在中心底部。

现在我想从子图切换到集群,以确保分组节点总是彼此靠近放置,并且我想要有边框和标签以使集群可见。但是当我将子图名称更改为“cluster_...”时,它看起来像这样。

这里有什么问题?为什么rank=same 不再按预期工作?此外,给定的 端口位置 不再按预期工作(边缘不再连接到节点的南/北)。

我试图将rank=same 从集群中拉出到自己的语句中,但这似乎完全覆盖了之前的集群语句,因为边框和标签消失了。另外,我尝试在节点连接上使用constraint=false,但这会打乱节点顺序,所以我对这种方法并不满意。

感谢任何帮助。如果您想重新创建图表,可以找到使用过的图像here

【问题讨论】:

    标签: graphviz dot


    【解决方案1】:

    你是对的,正如文档 states,“rank”属性适用于子图(集群不再是子图)。但是有什么问题,在你的集群中放另一个子图!

    digraph INV_X1 {
        rankdir = "LR";
        edge [penwidth="2"];
    
    /* Component styles */
        M_i_0 [shape=none;image="res/nmos.jpg"];
        M_i_1 [shape=none;image="res/pmos.jpg"];
    
    /* Node styles */
        A [style=filled;color=green];
        ZN [style=filled;color=green];
    
    /* Connections */
        M_i_0:n -> ZN;
        A -> M_i_0:w;
        subgraph cluster_a{
        /* Put M_i_0 and _VSS_0 on the same rank. */
            label="_VSS_0";
            subgraph g_VSS_0 {
                rank=same;
                _VSS_0 [shape=none;image="res/gnd.jpg";label=""];
                _VSS_0 -> M_i_0 [arrowhead=none];
            }
        }
        M_i_1:s -> ZN;
        A -> M_i_1:w;
        /* Put M_i_1 and _VDD_1 on the same rank. */
        subgraph cluster_b {
            label="_VDD_1";
            subgraph g_VDD_1 {
                rank=same;
                _VDD_1 [shape=none;image="res/pwr.jpg";label=""];
                M_i_1 -> _VDD_1 [arrowhead=none];
            }
        }
    }
    

    另请注意,我已经更改了您的边 M_i_1 -> _VDD_1_VSS_0 -> M_i_0 的顺序,由于某种原因它们被颠倒了。

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多