如何停止GraphViz dot将我的聚类变得更加紧凑?

3
我试图使用dot布局多个不相关的图形,同时使用集群进行绘制和样式化框线。问题在于,当不使用集群进行渲染时,布局非常整齐,并将未连接的图形分离到一个集群中,但一旦我尝试使用集群,它们就会被压缩在一起,占用更少的空间,但输出的可读性明显降低(特别是一旦开始组合不同大小的标签)。以下是没有使用集群的版本:Graph without Clustering 这是使用集群的版本:Graph with Clustering 要获取没有集群的版本,请从“cluster”的末尾删除“r”。
digraph G {
  node[shape="rectangle",fontname="Nimbus Sans"];

  subgraph cluster_a {
    style=filled;
    bgcolor=lightgrey;
    node [style=filled,color=white];
    a_vq;    a_lvt;    a_wvw;    a_yvy;
    a_zgxl;    a_hqz;    a_yqq;    a_zofv;
    a_qvr;    a_qlz;    a_ycr;    a_ilq;
    a_ouw;    a_ryq;    a_lgl;    a_qvr->a_lgl;
    a_kwr;    a_qlz->a_kwr;    a_yl;    a_ilq->a_yl;
    a_kgyr;    a_hqz->a_kgyr;    a_llq;    a_ryq->a_llq;
    a_llo;    a_ryq->a_llo;    a_ll;    a_ryq->a_ll;
    a_ito;    a_ll->a_ito;    a_rql;    a_lgl->a_rql;
    a_ier;    a_kwr->a_ier;    a_lql;    a_yl->a_lql;
    a_vhgp;    a_lql->a_vhgp;

    a_vq->a_lvt;
    a_lvt->a_wvw;
    a_lvt->a_yvy;
    a_vq->a_zgxl;
    a_hqz->a_yqq;
    a_lvt->a_zofv;
    a_yvy->a_qvr;
    a_zgxl->a_qlz;
    a_zgxl->a_ycr;
    a_ycr->a_ilq;
    a_hqz->a_ouw;
    a_yqq->a_ryq;

}

  subgraph cluster_b {
    style=filled;
    bgcolor=lightgrey;
    node [style=filled,color=white];
    b_uel;
  }
}

我尝试在几个地方调整packmode属性,但它似乎只会破坏样式而不解决问题,而且我也不确定即使它正常工作是否能解决任何问题。 我想保留整洁、空间分隔的图形和聚类布局 - 有人知道是否可以实现吗?

缺少闭合的 }。已尝试多种方法,但目前尚未成功。无法嵌套 subgraph,添加 weight 到边也没有帮助。 - vaettchen
1个回答

3

这只是一种比较hack的方法,但它适用于您的样例 - 使用不可见的节点和边缘。我还简化了您的代码,不确定是否适合您的任务,但这样处理使它更易于查看。

digraph G 
{
    node[ shape = "rectangle", fontname = "Nimbus Sans", height = .5, width = 1 ];

    subgraph cluster_a 
    {
        style   = filled;
        bgcolor = lightgrey;

        node[ style = invis ];                       // create
        inv_1; inv_2;                                // invisible nodes

        node[ style = filled, color = white ];
        // first unconnected graph
        a_hqz  -> { a_ouw a_yqq a_kgyr }        
        a_ouw  -> { inv_1 }       [ style = invis ]  // insert invisible nodes
        a_kgyr -> { inv_2 }       [ style = invis ]  // using invisible edges
        a_yqq  -> a_ryq;
        a_ryq  -> { a_llq a_llo a_ll }
        a_ll   -> a_ito;
        // second unconnected graph
        a_vq   -> { a_lvt a_zgxl }
        a_lvt  -> { a_wvw a_yvy a_zofv }
        a_zgxl -> { a_qlz a_ycr }
        a_yvy  -> a_qvr -> a_lgl -> a_rql;
        a_qlz  -> a_kwr -> a_ier;
        a_ycr  -> a_ilq -> a_yl -> a_lql -> a_vhgp;     
    }

    subgraph cluster_b 
    {
        style   = filled;
        bgcolor = lightgrey;
        node[ style = filled, color = white ];
        b_uel;
    }
}

enter image description here


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