21

我到了一半,请看编辑

好的,这是我的问题,我正在生成一个 python 模块的图表,包括所有文件及其函数/方法/类。

我想这样安排,节点围绕它们的父节点聚集成圆圈,目前所有东西都在一个巨大的水平行上,这使得东西 > 50k 像素宽,也让 svg 转换器失败(只渲染大约一半的图形)。

我浏览了文档,但找不到任何似乎可以解决问题的方法。

所以问题是:
有没有一种简单的方法可以做到这一点,还是我必须自己布局整个事情?:/

编辑:
感谢安德鲁斯的评论,我有正确的布局,现在唯一的问题是它有点“紧凑”......所以现在的问题是,如何解决这个问题?

测试

4

3 回答 3

35

我已经提到了影响您当前布局的所有最重要的参数,然后为这些参数提供了建议值。不过,我怀疑你可以通过应用这些建议来获得你想要的布局。

  • 减少边缘权重,例如,[weight=0.5];这将使边缘更长,导致您当前在图表中看到的紧密集群“扇出”。

  • 摆脱节点边框,node_A [color=none; 形状=明文];特别是对于椭圆形节点,总节点空间的很大一部分是“未使用的”(即,不用于显示节点标签)。

  • 显式设置节点的字体大小(节点边界被放大,以便它们围绕节点文本,这意味着给定节点的字体大小和文本数量对其大小有显着影响);[fontsize=11] 应该足够大以清晰易读,同时减少“杂乱”的外观(默认大小为 14)。

  • 通过 'nodesep' 增加节点之间的最小间隔;例如,nodesep=2.0;这将直接解决您对图表“太紧凑”的反对意见。('nodesep' 和 'ranksep' 可能比节点、边或图的任何其他参数更能影响 dot 如何绘制图。在你的情况下,看起来你只有两个节点等级;'ranksep' 设置最小距离在不同 等级的节点之间 - 看起来构成图表的所有节点都具有相同的等级(中心中的少数顶级节点除外)。

  • 显式设置总图形大小,例如 size="7.75,10.25" (确保您的图形适合 8.5 x 11 页面并占据整个空间)

  • 还有一个纯粹的美学建议,最多只会帮助你的图表看起来不那么混乱:边和节点的默认字体颜色都是黑色。图表上的大部分墨水来自这两种结构(特别是如果您删除节点边框),所以我会例如将节点(文本)字体颜色或边缘字体颜色设置为“蓝色”以帮助眼睛区分两组图结构。

于 2010-04-16T04:47:02.167 回答
6

如果它太紧凑,你会想要弄乱边长。根据图形布局,您有几个选项:

  1. 如果您的布局是 sfdp 或 fdp,请调整图形属性K。默认值为 0.3。
  2. 对于neato(或fdp),调整边缘属性len。默认为 1.0,neato 为 0.3,fdp 为 0.3。
  3. 对于点,您可以使用边缘属性minlen,它是最小边缘长度。默认值为 1。

您可能还想弄乱决定聚类行为的图形属性模型。具体来说,尝试subset。我相信这会为您 处理len : http ://www.graphviz.org/doc/info/attrs.html#d:model

此外,您可以使用缩放技术消除所有重叠:http ://www.graphviz.org/doc/info/attrs.html#d:overlap

于 2010-05-24T17:05:12.447 回答
0

我有大约 500 个节点并使用了 doug 的推荐。

这是我的示例代码(在 python 中):

f = Digraph('companies',filename='companies.gv',
          edge_attr={'weight':'1',
                     'fontsize':'11',
                     'fontcolor':'blue',
                     'len':'4'},
          graph_attr={'fixedsize':'false', 
                      'bgcolor':'transparent'},
          node_attr={'fontsize':'11', 
                     'shape':'plaintext', 
                     'color':'none',
                     'fontcolor':'black'})

f.attr(layout="neato")
f.attr(nodesep='3')
f.attr(ranksep='3')
f.attr(size='5000,5000')
于 2018-07-20T02:31:42.010 回答