2015-10-23 47 views
1

我试图使用dot来同时使用群集来绘制几个未连接的图形,并在每个图形周围绘制样式框。如何停止GraphViz点使我的集群更紧凑?

问题是,虽然在没有集群的渲染上,布局非常整洁,并且在一个集群内分隔出非连接的图形,但是一旦我尝试使用集群,它们会一起压缩这些集合,使用更少的空间,但渲染输出要少得多显然是可以理解的(特别是一旦它开始包装不同大小的标签)。

这里有没有聚集的版本:

Graph without Clustering

而且这里是:

Graph with Clustering

和源 - 获得无群集的版本我刚刚删除的 “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属性摆弄,但它只是似乎使造型没有固定的问题,我不能完全肯定是否会解决任何事情,即使它的工作正常。

我想保留整齐,空间分离的图形与聚类布局 - 有谁知道这是否可以完成?

+0

收盘'}'失踪了。已尝试过各种方法,但迄今尚未成功。嵌套'子图'是不可能的,并且向边添加'weight'不会有帮助。 – vaettchen

回答

1

更多的黑客比真实的答案,但它适用于您的示例 - 使用隐形节点和边缘。我也简化了你的代码,不确定这是否适合你的任务,但它使查看更容易。

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