我想确保所有节点在布局后的某个范围内(比如0,0,W,H)。
我认为边框将是通过使用bb属性的解决方案,但点和新藤只是简单地覆盖它。
例如,我的图表:
strict digraph {
1,2,3;
1 -> 3;
3 -> 2;
}neato -Gbb="0,0,50,50" -T dot file.txt输出
strict digraph {
graph [bb="0,0,120.49,162.36"];
node [label="\N"];
1 [height=0.5,
pos="27,18",
width=0.75];
3 [height=0.5,
pos="70.233,75.918",
width=0.75];
1 -> 3 [pos="e,57.954,59.469 39.043,34.133 43.004,39.441 47.504,45.468 51.827,51.261"];
2 [height=0.5,
pos="93.485,144.36",
width=0.75];
3 -> 2 [pos="e,87.436,126.56 76.221,93.545 78.643,100.67 81.496,109.07 84.177,116.97"];
}对于bb的任何值或size和dpi的任何组合,我都会得到相同的位置。
我需要的是把所有的节点都放在一个给定的盒子里。
有什么建议怎么做吗?
全文:
我正在使用来自networkx的*graphviz_layout*来布局我的图形。我用pyprocessing绘制图表。我想避免重新缩放来自*graphviz_layout*的结果,如果有一种方法来告诉新的我的界限。
发布于 2013-12-12 06:01:55
这是TL;DR版本:
要从foo.gv中的图形生成900×1500像素的PNG图像,您可以运行:
dot -Tpng -Gsize=9,15\! -Gdpi=100 -ofoo.png foo.gv生成一幅宽为900像素或1500像素的图像,但不一定两者兼有;然后:
convert foo.png -gravity center -background white -extent 900x1500 final.png用空格填充图像,使其精确地为900×1500像素;其中convert是ImageMagick套件的一部分。
下面是详细的解释:
澄清:
dpi属性仅对位图和SVG输出格式有效。您想要做的事情有点复杂,因为Graphviz生成的图像的像素大小是由几个交互属性驱动的。
让我们以一个任意图为例。
命令gvgen -dh3将生成一个三级有向超立方体。(如果您想了解更多的细节,这里是gvgen手册页面的PDF格式,但这并不重要,它只是一个演示用的任意图形。)
可以通过运行以下命令创建该图形的默认点生成PNG呈现:
gvgen -dh3 | dot -Tpng -oexample.png当我这样做,我得到一个275 x 347像素PNG格式(位图)图像.(据file example.png报道)
size属性允许您推荐输出图像的最大或所需的高度和宽度(以英寸为单位)。也就是说,属性size=3,5告诉Graphviz最多生成一个3英寸×5英寸的图像。如果图像一开始小于3乘5,Graphviz将不使用它。如果图像一开始大于3英寸乘5英寸,Graphviz会将其缩小,直到它适合于3×5英寸的画布(保持原始图像的高宽比)。
添加感叹号将size属性从最大大小更改为所需的大小。现在,如果这两个维度都小于指定的大小,则绘图将被缩放,直到至少有一个维度等于指定的大小。
例如,运行:
gvgen -dh3 | dot -Tpng -Gsize=3,5\! -oexample.png(请注意,\!转义了bash的感叹号。在DOT文件中,只需编写size=3,5!。)
生成一个288 x 363像素的图像,在默认的两个维度中都略大一些。
点是怎么算出这些数字的?好吧,Graphviz的默认DPI值是每英寸96像素。在这种分辨率下,3×5英寸的图像是288×480像素的图像。布局引擎只需放大图像,直到至少有一个尺寸匹配所需的大小。
可以使用属性覆盖默认DPI值,如下所示:
gvgen -dh3 | dot -Tpng -Gsize=3,5\! -Gdpi=200 -oexample.png现在,生成的图像测量600乘757像素。同样,Graphviz只需缩放图像,直到其中一个尺寸符合所需的大小(但在这种分辨率下,3×5英寸的图像是600×1000像素的图像)。
因此,如果您想要生成包含任意数量像素的图像,则需要适当地设置size和dpi。
也就是说,假设您想要创建一个900×1500像素的图像。你可以用:
gvgen -dh3 | dot -Tpng -Gsize=9,15\! -Gdpi=100 -oexample.png或
gvgen -dh3 | dot -Tpng -Gsize=3,5\! -Gdpi=300 -oexample.png甚至:
gvgen -dh3 | dot -Tpng -Gsize=900,1500\! -Gdpi=1 -oexample.png(不过,虽然上一次测试似乎对我有效,但我还是建议坚持更传统的新闻部价值观,以防万一。)
这解决了大部分问题,但请注意,Graphviz只是在缩放图像,直到其中一个维度与指定大小匹配为止。根据您的原始图像的高宽比,您可能会或不可能得到确切的大小,您正在寻找。
这就是属性发挥作用的地方。
命令:
gvgen -dh3 | dot -Tpng -Gsize=3,5\! -Gdpi=300 -Gratio=fill -oexample.png应该为您提供一幅具有您所要寻找的精确尺寸的图像,但请注意以下几点:
ratio还接受一些不同的值。看一下文献资料和/或实验,看看他们在做什么。
至于它的价值,如果你真的想要一个精确像素尺寸的图像,我的建议是让Graphviz缩放图像,这样两个维度中的一个匹配,然后使用像ImageMagick这样的东西来填充图像,以达到你想要的精确的纵横比。例如,命令:
convert in.png -gravity center -background white -extent 900x1500 out.png将图像(来自in.png)中心放在900×1500像素的画布上(保存到out.png中),必要时填充水平或垂直尺寸。
https://stackoverflow.com/questions/14784405
复制相似问题