Graphviz忽略大小属性(A4页面)

时间:2013-07-18 09:23:27

标签: graphviz

考虑以下适用于A4页面的最小示例图

digraph G{
size="8.3,11.7!" ratio=fill;
foo->bar;
}

neato -Tpdf -o min_ex.pdf min_ex.gv汇编 生成的pdf文件尺寸为236毫米x 115毫米,而不是预期的210毫米x 297毫米。

Graphviz对于小于页面的图形(如此图形)以及必须按比例缩小以适应的图形忽略此属性。

我尝试了sizeratio属性的任意组合,我无法将图表放在包含其中任何一个的A4页面上。

那么,我有什么要说明图表总是放在A4页面上,无论其大小如何?

文档:

size

  

绘图的最大宽度和高度,以英寸为单位。如果只给出一个数字,则用于宽度和高度。

     

如果已定义且绘图大于给定大小,则绘图将按比例缩小,以使其适合给定大小。

     

如果大小以感叹号(!)结束,则将其视为所需大小。在这种情况下,如果图纸的两个尺寸都小于尺寸,则图纸被均匀地放大,直到至少一个尺寸等于其尺寸尺寸。

ratio

  

设置图纸的纵横比(图纸高度/图纸宽度)。请注意,在强制执行大小属性约束之前会对此进行调整。此外,计算通常会忽略节点大小,因此最终的绘图大小可能只接近所需的大小。

     

如果ratio是数字,则将其视为所需的宽高比。然后,如果实际纵横比小于期望比率,则按比例绘制拉伸高度以获得所需比率;如果实际比率大于所需比率,则绘制宽度按比例放大。

     

如果比率="填充"并且设置了size属性,节点位置在x和y中分别缩放,以便最终绘图完全填充指定的大小。如果两个尺寸值都超过图形的宽度和高度,则相应地按比例放大每个节点的两个坐标值。但是,如果任一尺寸尺寸小于图形中的相应尺寸,则会按比例放大一个尺寸,以使最终图形具有与尺寸指定的纵横比相同的纵横比。然后,在渲染时,布局将在两个维度上均匀缩小以适合给定大小,这可能导致节点和文本也缩小。这可能不是用户想要的,但它避免了如何以可接受的方式重新定位节点以减少绘图大小的难题。

     

如果比率="压缩"并且设置了size属性,dot尝试压缩初始布局以适合给定的大小。这实现了节点的更紧密堆积,但降低了平衡和对称性。此功能仅适用于点。

     

如果ratio ="展开",则设置尺寸属性,并且图形的宽度和高度都小于尺寸值,节点位置均匀缩放,直到至少一个尺寸适合大小确切。请注意,这与使用大小作为所需大小不同,因为此处绘制在生成边缘之前展开,并且所有节点和文本大小保持不变。

     

如果ratio =" auto",则设置页面属性并且无法在单个页面上绘制图形,然后将大小设置为“理想”''值。特别地,给定维度中的大小将是该维度中页面大小的最小整数倍,其至少是当前大小的一半。然后将这两个维度独立地缩放到新的大小。此功能仅适用于点。

1 个答案:

答案 0 :(得分:8)

问题在于比率的细节:

  

请注意,这是在尺寸属性约束之前调整的   强制执行。此外,计算通常忽略节点大小,   所以最终的图纸尺寸可能只接近所需的尺寸。

似乎是graphviz

  • 将节点布置为(忽略大小)
  • 调整点节点的比例(仍然没有节点大小)
  • 应用图表的大小限制(在我们的示例中,放大图像):这里我们已经达到了所需的尺寸,但我们还没有完成......
  • 然后点节点成为具有实际大小的节点(默认为0.5英寸高,0.75英寸宽)
  • 最后整个输出获得了保证金

结果将大于A4。

因此,如果我们要使节点和边距尽可能小,那么输出应该相对接近A4。

margin设置为0,将节点的shape设置为point以及将widthheight设置为最小值,如下图所示:< / p>

digraph G{
 ratio="fill";
 size="8.3,11.7!";
 margin=0;

 node[shape=point, height=0.02, width=0.01];
 foo->bar;
}
带有此图表的

neato -Tpdf会生成尺寸为211x297mm的PDF(使用8.267 inches as width会产生干净的210x297mm)。


不幸的是,即使知道graphviz如何在ratio=fill方面工作,我也不认为有一种简单的方法可以确保在使用实际具有宽度和高度的节点时最终结果总是A4。

相关问题