GraphViz DOT 输出:"edge" 的 4-6 "pos" 坐标是什么
GraphViz DOT output: What are the 4-6 "pos" coordinates for an "edge"
我刚开始尝试使用 GraphViz 的“neato”命令
Kamada-Kawai 图形可视化(使用压力专业化解决)。
我对提取布局节点特别感兴趣
外部处理的坐标。
我在看这个
问题
找出输出 DOT 中图边的“pos”属性
文件。该属性由 4 个坐标点组成。一个有帮助
answer 表示
一系列坐标(不一定是 4 个)是 a 的控制点
样条曲线,可能是 Bezier
样条。
回答者是“复眼”,我称之为“CE”。这是
给出的例子:
// digrfG.dot
//-----------
digraph G {
A [label = "A" xlabel="a" pos="0,100" ]
B [label = "B" xlabel="b" pos="100,0"]
A -> B [label = "A->B www" xlabel="a->b"]
[pos="0,100 0,0 0,0 100,0"]
}
在Bash中,由GraphViz处理使用:
# Make image:
#------------
dot -Kneato -n2 -Tpng digrfG.dot >| digrfG.png
# Make output DOT file:
#----------------------
dot -Kneato -n2 digrfG.dot >| digrfG_out.dot
输出为:
# digrfG_out.dot
#---------------
digraph G {
graph [bb="-7,0,154,151"];
node [label="\N"];
A [height=0.5, label=A, pos="27,118",
width=0.75, xlabel=a, xlp="-3.5,143.5"];
B [height=0.5, label=B, pos="127,18",
width=0.75, xlabel=b, xlp="96,43.5"];
A -> B [label="A->B www", lp="42.5,75.5",
pos="27,118 27,18 27,18 127,18",
xlabel="a->b", xlp="63.5,60.5"];
}
我的边缘坐标不匹配
CE's,既不在
数值量也不在坐标数中。虽然我有 4
坐标,CE有6个,包括2个开头的坐标
以“s”和“e”为前缀的系列。 贝塞尔曲线
页
被 CE 引用给人的印象是典型的贝塞尔样条有 4
控制点,包括 起点和终点,虽然数学
允许更多。 这个微软
页
强化了这种 4 分违约的印象。
这个GraphViz
page 表明
一条边的“pos”属性包含一条样条曲线,以 start 和
根据 CE 的输出,端点以“s”和“e”为前缀,但
语法令人费解。如果是正则表达式语法,那么就有
可选 起点和终点后有 4 个或更多坐标。
这或许可以解释为什么我没有以“s”为前缀的坐标,或者
“e”,但我有 4 个坐标。
在上面的digrfG_out.dot
中,如果我将4个坐标与
节点坐标,很明显第4个中的第一个和最后一个
坐标匹配节点坐标。 好像是CE的GraphViz
默认为 6 个控制点并明确指定开始和结束
指向坐标列表的头部,而我的 GraphViz
默认为4,不对开始和结束做特殊处理
points. 自 GraphViz 的样条
page 是这样的
模棱两可,我想知道这个解释是否可以得到证实。
谢谢。
我建议跳过 CE 的解释(不一定是错误的,但可能含糊不清)并转到 Graphviz 网站上的源代码。
是的,贝塞尔曲线每个“段”(我的术语)需要 4 个点,但一个段中的最后一个点也用作下一个段中的第一个点。 Graphviz 的箭头使用单独的点 - 作为箭头的一端。
可选的 s(开始)和 e(结束)点用于可选箭头。然后是 4 个必填点,然后是可选的 3 个点。
参见第 36 页 https://www.graphviz.org/pdf/dotguide.pdf, https://forum.graphviz.org/t/how-to-control-the-points-of-splines/1087, and https://forum.graphviz.org/t/fun-with-edges/888 - in addition to the (yes, regular expression) http://www.graphviz.org/docs/attr-types/splineType/
希望对您有所帮助。
任何边都可以有箭头,即使在 non-directed 图中也是如此。 Digraph 只是设置默认值(箭头或无箭头)。 dir 属性 (https://graphviz.org/docs/attrs/dir/) 显式设置箭头。
最后,箭头形状(https://graphviz.org/doc/info/arrows.html)可以是“none”。
graph {
A--B [dir=forward]
C--D [dir=back]
E--F [dir=both]
G--H [dir=none]
}
Dot 产生这个:
我刚开始尝试使用 GraphViz 的“neato”命令 Kamada-Kawai 图形可视化(使用压力专业化解决)。 我对提取布局节点特别感兴趣 外部处理的坐标。
我在看这个 问题 找出输出 DOT 中图边的“pos”属性 文件。该属性由 4 个坐标点组成。一个有帮助 answer 表示 一系列坐标(不一定是 4 个)是 a 的控制点 样条曲线,可能是 Bezier 样条。 回答者是“复眼”,我称之为“CE”。这是 给出的例子:
// digrfG.dot
//-----------
digraph G {
A [label = "A" xlabel="a" pos="0,100" ]
B [label = "B" xlabel="b" pos="100,0"]
A -> B [label = "A->B www" xlabel="a->b"]
[pos="0,100 0,0 0,0 100,0"]
}
在Bash中,由GraphViz处理使用:
# Make image:
#------------
dot -Kneato -n2 -Tpng digrfG.dot >| digrfG.png
# Make output DOT file:
#----------------------
dot -Kneato -n2 digrfG.dot >| digrfG_out.dot
输出为:
# digrfG_out.dot
#---------------
digraph G {
graph [bb="-7,0,154,151"];
node [label="\N"];
A [height=0.5, label=A, pos="27,118",
width=0.75, xlabel=a, xlp="-3.5,143.5"];
B [height=0.5, label=B, pos="127,18",
width=0.75, xlabel=b, xlp="96,43.5"];
A -> B [label="A->B www", lp="42.5,75.5",
pos="27,118 27,18 27,18 127,18",
xlabel="a->b", xlp="63.5,60.5"];
}
我的边缘坐标不匹配 CE's,既不在 数值量也不在坐标数中。虽然我有 4 坐标,CE有6个,包括2个开头的坐标 以“s”和“e”为前缀的系列。 贝塞尔曲线 页 被 CE 引用给人的印象是典型的贝塞尔样条有 4 控制点,包括 起点和终点,虽然数学 允许更多。 这个微软 页 强化了这种 4 分违约的印象。
这个GraphViz page 表明 一条边的“pos”属性包含一条样条曲线,以 start 和 根据 CE 的输出,端点以“s”和“e”为前缀,但 语法令人费解。如果是正则表达式语法,那么就有 可选 起点和终点后有 4 个或更多坐标。 这或许可以解释为什么我没有以“s”为前缀的坐标,或者 “e”,但我有 4 个坐标。
在上面的digrfG_out.dot
中,如果我将4个坐标与
节点坐标,很明显第4个中的第一个和最后一个
坐标匹配节点坐标。 好像是CE的GraphViz
默认为 6 个控制点并明确指定开始和结束
指向坐标列表的头部,而我的 GraphViz
默认为4,不对开始和结束做特殊处理
points. 自 GraphViz 的样条
page 是这样的
模棱两可,我想知道这个解释是否可以得到证实。
谢谢。
我建议跳过 CE 的解释(不一定是错误的,但可能含糊不清)并转到 Graphviz 网站上的源代码。
是的,贝塞尔曲线每个“段”(我的术语)需要 4 个点,但一个段中的最后一个点也用作下一个段中的第一个点。 Graphviz 的箭头使用单独的点 - 作为箭头的一端。
可选的 s(开始)和 e(结束)点用于可选箭头。然后是 4 个必填点,然后是可选的 3 个点。
参见第 36 页 https://www.graphviz.org/pdf/dotguide.pdf, https://forum.graphviz.org/t/how-to-control-the-points-of-splines/1087, and https://forum.graphviz.org/t/fun-with-edges/888 - in addition to the (yes, regular expression) http://www.graphviz.org/docs/attr-types/splineType/
希望对您有所帮助。
任何边都可以有箭头,即使在 non-directed 图中也是如此。 Digraph 只是设置默认值(箭头或无箭头)。 dir 属性 (https://graphviz.org/docs/attrs/dir/) 显式设置箭头。
最后,箭头形状(https://graphviz.org/doc/info/arrows.html)可以是“none”。
graph {
A--B [dir=forward]
C--D [dir=back]
E--F [dir=both]
G--H [dir=none]
}
Dot 产生这个: