减小 graphviz 生成的图形的大小(如面积)

Posted

技术标签:

【中文标题】减小 graphviz 生成的图形的大小(如面积)【英文标题】:Reducing the size (as in area) of the graph generated by graphviz 【发布时间】:2011-03-26 14:24:53 【问题描述】:

有没有人有任何减少graphviz生成的图形大小的一般技巧(大小以区域为单位,而不是文件大小)。

我有一个相当大的图表(700 个节点)。我为每个节点设置了一个较小的字体大小,但它似乎只是减小了字体大小而不是实际节点大小。是否还有任何属性可以减少图表中空白的总量?谢谢!

【问题讨论】:

这个***.com/questions/1286813/… 的答案是关于最优雅和最少需要实现的工作。 @Forbesmyester 否-您链接到的答案总而言之是“使图形更小,”缩小“-很好,这可能适用于渲染任何数字图像。GraphViz 是图形布局引擎,因此,关于减少图形大小的问题的有用答案最有用的是针对图形本身的布局,因为这是 GraphViz 所做的事情的本质,即布局图。更重要的是,“缩小”解决方案没有t 解决例如大的空白或稀疏区域,但实际上更好的布局技术。 【参考方案1】:

根据我使用 graphviz 渲染该大小的图形(约 700 个节点)的经验,对所有三个对象(图形、节点和边)应该做你想做的事:

减少节点之间的最小间隔,通过“nodesep”;例如,节点[nodesep=0.75];这将使您的图表“过于紧凑”。 (nodesepranksep 可能比任何其他可调参数更能影响 dot 绘制图形的方式)

减少不同等级节点之间的最小距离,例如nodes[ranksep=0.75]; 'ranksep' 设置不同等级的节点之间的最小距离 - 如果您的图表由多个等级组成,这将显着影响您的图表布局

增加边缘权重,例如,edge[weight=1.2];这将使边缘更短,从而使整个图更紧凑

移除节点边框和节点填充,例如,nodes[color=none; shape=plaintext],特别是对于椭圆形节点,总节点空间的很大一部分是“未使用的”(即,不用于显示节点标签);每个节点的足迹现在减少到只是它的文本

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

对节点和边使用不同的颜色——这将使您的图表更易于阅读;例如,将节点“文本”字体颜色设置为蓝色,将边缘字体颜色设置为“灰色”,以帮助眼睛区分两组图形结构。这将产生比您想象的更大的差异。

明确设置图表总大小,例如,graph[size="7.75,10.25"](确保您的图表适合 8.5 x 11 的页面并且占据整个空间)

【讨论】:

感谢您的详细回复。我唯一的问题是设置字体大小似乎并没有减少它的整体节点大小。似乎唯一变小的是字体。 没问题。关于'fontsize',如果你删除了节点边框和节点填充first,使得每个节点的表示只是节点文本,那么减小文本大小正是你想要的,因为它减少了“表观”节点大小。 (当然,删除节点边框/填充并不总能提高整体“分辨率”——这取决于你的图表,但你一试就会知道)。 上面的建议很棒,比我所做的提供了更多的功能...cat [something.dot] | dot-Gdpi=64 -Tpng:cairo:cairo > [outfile.png] 只是缩放图表... 将节点边缘更改为灰色确实会产生影响,尤其是当您必须仔细研究巨大的混乱图形时。谢谢! nodes[nodesep=0.75] 不再起作用,它必须直接放入图中。 ranksep 也一样

以上是关于减小 graphviz 生成的图形的大小(如面积)的主要内容,如果未能解决你的问题,请参考以下文章

Graphviz 网格对齐

是否可以使用Graphviz创建复杂的图像(如跨功能流程图?

Graphviz 中的 CSS 样式表

iText:降低图像质量(用于减小生成的 PDF 大小)

面积生成器

是否存在一条直线,将任意一个平面图形分割成面积相等的两部分?