如何停止GraphViz点使我的群集更紧凑?

时间:2015-10-23 21:45:25

标签: graphviz dot

我尝试使用dot同时使用群集来布局几个未连接的图形,以便在每个图形周围绘制和设置样式框。

问题在于,在没有聚类的渲染中,布局非常整洁并且在一个聚类中分离出未连接的图形,但是一旦我尝试使用聚类,它就会将这些聚集在一起,使用更少的空间但是输出更不清楚可以理解的(特别是一旦它开始将不同尺寸的标签打包在一起)。

这里是没有群集的版本:

Graph without Clustering

以下是:

Graph with Clustering

源代码 - 为了获得没有聚类的版本我只是删除了" r"在#34; cluster"结束时。

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属性,但它似乎打破了造型而没有解决问题,我不能完全确定即使它正常工作也能解决任何问题。

我想保留整齐,空间分离的图表和聚类布局 - 有谁知道这是否可以做到?

1 个答案:

答案 0 :(得分:2)

更多的是黑客而不是真正的答案,但它适用于您的样本 - 使用不可见的节点和边缘。我还简化了您的代码,不确定这是否适合您的任务,但它使得查看更容易。

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