使用
$ dot -Tcanon input.dot
$ dot -Tdot input.dot
$ dot -Tgv input.dot
$ dot -Txdot input.dot
$ dot -Txdot1.2 input.dot
$ dot -Txdot1.4 input.dot

DOT

Graphviz 语言

这些格式生成以 dot 语言 为输出的输出。

canon

使用 canon 会生成输入的漂亮打印版本,而不执行布局。

示例:简单的图,使用 -Tcanon 规范化的格式

$ echo 'digraph { a->b }' | dot -Tcanon
digraph {
        node [label="\N"];
        a -> b;
}

dot / gv

dot(以及 gv 别名)选项对应于带属性的 dot 输出,并且是默认的输出格式。它会重现输入,以及图的布局信息。特别是,一个 bb 属性会附加到图上,指定图形的边界框。如果图有一个标签,它的位置由 lp 属性指定。

每个节点都会获得 poswidth 属性,并且记录矩形在 rects 属性中给出。如果节点是多边形并且定义了 vertices 属性,则此属性包含节点的顶点。

每条边都分配了一个 pos 属性,并且如果边有一个标签,则标签位置在 lp 中给出。

示例:简单的图,使用 -Tdot 输出布局位置

$ echo 'digraph { a->b }' | dot -Tdot
digraph {
        graph [bb="0,0,54,108"];
        node [label="\N"];
        a    [height=0.5,
             pos="27,90",
             width=0.75];
        b    [height=0.5,
             pos="27,18",
             width=0.75];
        a -> b  [pos="e,27,36.104 27,71.697 27,63.983 27,54.712 27,46.112"];
}

xdot

xdot 格式通过提供有关图形组件绘制方式的更详细的信息来扩展 dot 格式。它依赖于节点、边和图形的附加属性。

另请参阅 xdot 属性类型文档

该格式是流动的;欢迎对更好的表示方法提出评论和建议。为了允许格式更改,Graphviz 将属性 xdotversion 附加到图上。如果在输入图中设置了 xdotversion 属性,则渲染器将只输出该版本支持的功能。请注意,格式 xdot1.2xdot1.4 分别等效于设置 xdotversion=1.2xdotversion=1.4

其他绘图属性可以出现在节点、边、集群和图本身。有六个新的属性

属性 描述 限制
draw 不带标签的一般绘图
ldraw 标签绘制
hdraw 头部箭头 仅限边
tdraw 尾部箭头 仅限边
hldraw 头部标签 仅限边
tldraw 尾部标签 仅限边

对于给定的图形对象,通常会在标签指令之前发出一个 draw 指令。例如,对于节点,首先会使用 draw 中的命令,然后使用 ldraw 中的命令。

这些属性的值由以下 14 个渲染或属性操作的一些(多)集的串联组成。(括号中的数字给出了操作添加到格式中的 xdot 版本。如果没有版本号,则操作在原始规范中。)

E x₀ y₀ w h
填充的椭圆 ((x - x₀) ÷ w)² + ((y - y₀) ÷ h)² = 1
e x₀ y₀ w h
未填充的椭圆 ((x - x₀) ÷ w)² + ((y - y₀) ÷ h)² = 1
P n x₁ y₁ ... xₙ yₙ
使用给定的 n 个点填充的多边形
p n x₁ y₁ ... xₙ yₙ
使用给定的 n 个点未填充的多边形
L n x₁ y₁ ... xₙ yₙ
使用给定的 n 个点折线
B n x₁ y₁ ... xₙ yₙ
使用给定的 n 个控制点绘制 B 样条曲线
b n x₁ y₁ ... xₙ yₙ
使用给定的 n 个控制点填充的 B 样条曲线 (1.1)
T x y j w n -b₁b₂...bₙ
使用基线点 (x,y) 绘制的文本。文本由 - 后的 n 个字节组成。如果 j 分别为 -1 (0, 1),则文本应左对齐(居中、右对齐)到点上。值 w 给出由库计算的文本宽度。
t f
设置字体特征。整数 f 是以下标志的 OR
标志 最小版本
BOLD 1
ITALIC 2
UNDERLINE 4
SUPERSCRIPT 8
SUBSCRIPT 16 (1.5)
STRIKE_THROUGH 32 (1.6)
OVERLINE 64 (1.7)
C n -b₁b₂...bₙ
设置填充颜色。颜色值由 - 后的 n 个字节组成。(1.1)
c n -b₁b₂...bₙ
设置笔颜色。颜色值由 - 后的 n 个字节组成。(1.1)
F s n -b₁b₂...bₙ
设置字体。字体大小为 s 点。字体名称由 - 后的 n 个字节组成。(1.1)
S n -b₁b₂...bₙ
设置样式属性。样式值由 - 后的 n 个字节组成。该值的语法与 style 中指定的 styleItem 相同。(1.1)
I x y w h n -b₁b₂...bₙ
在左下角为 (x,y)、右上角为 (x+w,y+h) 的框中绘制外部指定的图像。图像的名称由 - 后的 n 个字节组成。这通常是位图图像。请注意,即使从像素转换为点,图像大小也可能与所需大小 (w,h) 不同。假设渲染器将执行必要的缩放。(1.2)

请注意,填充图形(椭圆、多边形和 B 样条曲线)意味着两个操作:首先,使用当前填充颜色绘制填充图形;其次,使用当前笔颜色、笔宽度和笔样式绘制非填充图形。

在一个单一的绘图属性(例如,draw)的上下文中,图形属性存在一个隐含状态。也就是说,一旦设置了颜色、样式、字体或字体特征,它将对所有相关的绘图操作保持有效,直到通过另一个 xdot 命令重置该值。

可以在图形模型中包含的样式值不会出现在 xdot 输出中。特别是,样式值 filledroundeddiagonalsinvis 不会出现。实际上,如果样式包含 invis,则根本不会有 xdot 输出。

从 xdot 1.4 版本开始,颜色字符串现在可以编码线性渐变和径向渐变。线性渐变的格式如下:
    '[' x₀ y₀ x₁ y₁ n [color-stop]⁺ ']'
其中 (x₀,y₀) 和 (x₁,y₁) 定义渐变线段的起点和终点,n 给出 color-stop 的数量。每个 color-stop 的格式如下:
    v m -b₁b₂...bₘ
其中 v 是一个在 [0,1] 范围内的数字,定义了渐变线段上的一个位置,颜色由 m 字节字符串 b₁b₂...bₘ 指定,与 'c' 和 'C' 操作中用于颜色的格式相同。

径向渐变的格式如下:
    '(' x₀ y₀ r₀ x₁ y₁ r₁ n [color-stop]⁺ ')'
其中 x y r(对于 j=0,1)指定起点和终点圆的中心和半径,n 给出 color-stop 的数量。一个 color-stop 与线性渐变中定义的格式相同,同样给出小数偏移量及其关联的颜色。

在处理文本对齐时,应用程序可能希望使用自己的渲染原语重新计算字符串宽度。

文本操作仅用于标签属性。通常,非文本操作仅用于非标签属性。但是,如果在边上设置了 decorate 属性,其标签属性也将包含一个折线操作。此外,如果标签是一个复杂的、类似 HTML 的标签,它也将包含非文本操作。

所有坐标和大小都以点为单位。不过请注意,如果边或节点不可见,则不会附加任何绘图操作。

版本信息

Xdot 版本 Graphviz 版本 修改
>1.0 1.9
>1.1 2.8 第一个插件版本
>1.2 2.13 支持图像操作符 I
>1.3 2.31 添加数值精度
>1.4 2.32 添加渐变颜色
>1.5 2.34 修复文本布局问题;修复渐变中的反向向量;支持特定版本的输出;新的 t 操作用于文本特征
>1.6 2.35 t 添加删除线位
>1.7 2.37 t 添加上划线
示例:简单图形,使用 -Txdot 输出布局定位和绘图信息

$ echo 'digraph { a->b }' | dot -Txdot
digraph {
        graph [_draw_="c 9 -#fffffe00 C 7 -#ffffff P 4 0 0 0 108 54 108 54 0 ",
             bb="0,0,54,108",
             xdotversion=1.7
        ];
        node [label="\N"];
        a    [_draw_="c 7 -#000000 e 27 90 27 18 ",
             _ldraw_="F 14 11 -Times-Roman c 7 -#000000 T 27 86.3 0 7 1 -a ",
             height=0.5,
             pos="27,90",
             width=0.75];
        b    [_draw_="c 7 -#000000 e 27 18 27 18 ",
             _ldraw_="F 14 11 -Times-Roman c 7 -#000000 T 27 14.3 0 7 1 -b ",
             height=0.5,
             pos="27,18",
             width=0.75];
        a -> b  [_draw_="c 7 -#000000 B 4 27 71.7 27 63.98 27 54.71 27 46.11 ",
             _hdraw_="S 5 -solid c 7 -#000000 C 7 -#000000 P 3 30.5 46.1 27 36.1 23.5 46.1 ",
             pos="e,27,36.104 27,71.697 27,63.983 27,54.712 27,46.112"];
}
最后修改时间:2024 年 7 月 28 日:用所有 Hugo 'ref's 替换 'relref's (bbef86a)