Graphviz图形定位xlabels
Graphviz graph positioning xlabels
我尝试过使用 xlp 并遵循了这个 graphviz 线程 (http://www.graphviz.org/content/how-use-xlp-attribute-positioning-external-labels-xlabel),但两者都没有真正起作用。
这是我的点代码:
digraph {
forcelabels=true;
rankdir=LR;
graph[ranksep=1,nodesep=.5];
node[shape=box];
"start" [xlabel="start",xlp="0,0",shape=doublecircle,label=" "];
"requested"->"fault";
"requested"->"progress";
"start"->"requested";
"progress"->"fault";
"progress"->"progress";
"progress"->"complete";
"fault" [xlabel="fault",shape=doublecircle,label=" "];
"complete" [xlabel="complete",shape=doublecircle,label=" "];
}
这就是它的样子:
理想情况下,开始、故障和完成将直接位于节点下方,但我似乎无法正确放置 xlabels。
如果你使用neato
和-n2
标志,你应该可以设置xlabel
的位置。不过,您需要指定每个节点的位置。
因此,如果您有一个名为 lb.gv
的文件,其中包含以下内容:
digraph{
forcelabels=true;
rankdir=LR;
graph[ranksep=1,nodesep=.5,margin=0.3,bgcolor=Transparent];
node[shape=box];
start [pos="0,0", xlp="23,54", xlabel=start, shape=doublecircle, label= " "];
requested [pos="100,0"];
progress [pos="250,-66"];
fault [pos="400,70", xlp="424,124", xlabel=fault, shape=doublecircle,label= " "];
complete [pos="400,-66", xlp="424,-10", xlabel=complete, shape=doublecircle,label= " "];
requested->fault;
requested->progress;
start->requested;
progress->fault;
progress:w->progress:_;
progress->complete;
}
你可以运行neato -n2 -Tpng lb.gv > test.png
这就是我得到的:
不完全是你要问的,但你可以尝试这样的事情:
digraph nodes_as_labels {
rankdir=LR;
graph[ranksep=1,nodesep=.5];
node[shape=box];
"start" [xlp="0,0",shape=doublecircle,label=" "];
"fault" [shape=doublecircle,label=" "];
"complete" [shape=doublecircle,label=" "];
"startlabel" [label="start",penwidth="0"];
"faultlabel" [label="fault",penwidth="0"];
"completelabel" [label="complete",penwidth="0"];
"startlabel" -> "start"[style="invis"];
"requested"->"fault";
"requested"->"progress";
"start"->"requested";
"progress"->"fault";
"progress"->"progress";
"progress"->"complete";
"fault" -> "faultlabel"[style="invis"];
"complete" -> "completelabel"[style="invis"];
}
这导致:
当您使用 neato 或 fdp 布局引擎时,这种方法更适用,因为那时您可以使用 len 属性来设置充当标签的节点与您正在标记的节点之间的距离.这样您就可以防止标签重叠边缘。不幸的是,len
属性不适用于该示例使用的点布局引擎,这就是为什么结果中的标签远离它们所标记的节点的原因。
- 在 label 字符串中使用换行符将文本放在节点
下方
- 设置 fixedsize=true 以将节点大小保持为默认值
- 添加集群以防止最低标签被截断
digraph {
rankdir=LR;
graph[ranksep=1,nodesep=.5];
// add a cluster to provide "margin" for labels below nodes
subgraph cluster_space {
graph [peripheries=0]
node[shape=box];
// dot ignores xlp
// add newlines to shift label down
// fixedsize=true to keep node sized correctly
"start" [label="\n\n\n\nstart" shape=doublecircle fixedsize=true ];
"requested"
"progress"
"complete" [label="\n\n\n\ncomplete" shape=doublecircle fixedsize=true]
"fault" [label="\n\n\n\nfault" shape=doublecircle fixedsize=true]
"requested"->"fault";
"requested"->"progress";
"start"->"requested";
"progress"->"fault";
"progress"->"progress";
"progress"->"complete";
}
}
给予:
我尝试过使用 xlp 并遵循了这个 graphviz 线程 (http://www.graphviz.org/content/how-use-xlp-attribute-positioning-external-labels-xlabel),但两者都没有真正起作用。
这是我的点代码:
digraph {
forcelabels=true;
rankdir=LR;
graph[ranksep=1,nodesep=.5];
node[shape=box];
"start" [xlabel="start",xlp="0,0",shape=doublecircle,label=" "];
"requested"->"fault";
"requested"->"progress";
"start"->"requested";
"progress"->"fault";
"progress"->"progress";
"progress"->"complete";
"fault" [xlabel="fault",shape=doublecircle,label=" "];
"complete" [xlabel="complete",shape=doublecircle,label=" "];
}
这就是它的样子:
理想情况下,开始、故障和完成将直接位于节点下方,但我似乎无法正确放置 xlabels。
如果你使用neato
和-n2
标志,你应该可以设置xlabel
的位置。不过,您需要指定每个节点的位置。
因此,如果您有一个名为 lb.gv
的文件,其中包含以下内容:
digraph{
forcelabels=true;
rankdir=LR;
graph[ranksep=1,nodesep=.5,margin=0.3,bgcolor=Transparent];
node[shape=box];
start [pos="0,0", xlp="23,54", xlabel=start, shape=doublecircle, label= " "];
requested [pos="100,0"];
progress [pos="250,-66"];
fault [pos="400,70", xlp="424,124", xlabel=fault, shape=doublecircle,label= " "];
complete [pos="400,-66", xlp="424,-10", xlabel=complete, shape=doublecircle,label= " "];
requested->fault;
requested->progress;
start->requested;
progress->fault;
progress:w->progress:_;
progress->complete;
}
你可以运行neato -n2 -Tpng lb.gv > test.png
这就是我得到的:
不完全是你要问的,但你可以尝试这样的事情:
digraph nodes_as_labels {
rankdir=LR;
graph[ranksep=1,nodesep=.5];
node[shape=box];
"start" [xlp="0,0",shape=doublecircle,label=" "];
"fault" [shape=doublecircle,label=" "];
"complete" [shape=doublecircle,label=" "];
"startlabel" [label="start",penwidth="0"];
"faultlabel" [label="fault",penwidth="0"];
"completelabel" [label="complete",penwidth="0"];
"startlabel" -> "start"[style="invis"];
"requested"->"fault";
"requested"->"progress";
"start"->"requested";
"progress"->"fault";
"progress"->"progress";
"progress"->"complete";
"fault" -> "faultlabel"[style="invis"];
"complete" -> "completelabel"[style="invis"];
}
这导致:
当您使用 neato 或 fdp 布局引擎时,这种方法更适用,因为那时您可以使用 len 属性来设置充当标签的节点与您正在标记的节点之间的距离.这样您就可以防止标签重叠边缘。不幸的是,len
属性不适用于该示例使用的点布局引擎,这就是为什么结果中的标签远离它们所标记的节点的原因。
- 在 label 字符串中使用换行符将文本放在节点 下方
- 设置 fixedsize=true 以将节点大小保持为默认值
- 添加集群以防止最低标签被截断
digraph {
rankdir=LR;
graph[ranksep=1,nodesep=.5];
// add a cluster to provide "margin" for labels below nodes
subgraph cluster_space {
graph [peripheries=0]
node[shape=box];
// dot ignores xlp
// add newlines to shift label down
// fixedsize=true to keep node sized correctly
"start" [label="\n\n\n\nstart" shape=doublecircle fixedsize=true ];
"requested"
"progress"
"complete" [label="\n\n\n\ncomplete" shape=doublecircle fixedsize=true]
"fault" [label="\n\n\n\nfault" shape=doublecircle fixedsize=true]
"requested"->"fault";
"requested"->"progress";
"start"->"requested";
"progress"->"fault";
"progress"->"progress";
"progress"->"complete";
}
}
给予: