我是 graphviz 的新手,只是想知道如何确定图中的相对节点定位。例如,如果我想绘制一个简单的三角形“abc”,节点“a”在顶部,节点“b”和“c”在底部的同一层,我应该如何告诉graphviz布局根据需要节点?
我尝试了以下方法:
graph G
{
node [shape="circle"];
edge [lblstyle="auto"];
{rank=min; "a"}
a -- b [label = "-"];
a -- c [label = "-"];
{rank=same; "b" "c"}
b -- c [label = "+"];
}
Run Code Online (Sandbox Code Playgroud)
但输出将节点 'a' 和 'b' 置于顶部的同一级别,节点 'c' 位于底部。
此外,是否可以在同一个图形中并排绘制两个这样的三角形(中间有一个合适的空间)?如果是,它是如何实施的?
非常感谢。
我有一个 .dot 文件,它对具有很多级别的二叉决策树进行编码。为了可视化它,我使用命令dot -Tpng sample.dot > sample.png. 但是创建的 .png 是巨大的并且难以理解。所以我想知道是否可以限制从命令行输出文件中呈现的级别数,即我不想修改 -dot 文件,我只想调整 .png 输出的生成方式. 我阅读了文档,但找不到任何内容。
例如,如果我只想要决策树的前三个级别,是否有任何修饰符,例如:dot -Tpng sample.dot > sample.png -L 3?
当我在特定图表上运行 Graphviz 时,我得到
aromanov@ws:~/IdeaProjects/scalan$ dot -v -O -Tpng myfile.dot
dot - graphviz version 2.26.3 (20100126.1600)
Activated plugin library: libgvplugin_pango.so.6
Using textlayout: textlayout:cairo
Activated plugin library: libgvplugin_dot_layout.so.6
Using layout: dot:dot_layout
Using render: cairo:cairo
Using device: png:cairo:cairo
The plugin configuration file:
/usr/lib/graphviz/config6
was successfully loaded.
render : cairo dot fig gd map ps svg tk vml vrml xdot
layout : circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi
textlayout : textlayout
device : canon cmap cmapx cmapx_np dot eps …Run Code Online (Sandbox Code Playgroud) 我有一个简单的垂直图,使用以下代码看起来漂亮且对称,没有任何标签:
digraph test_alignment
{
{rank=same; a -> b;}
a -> c;
b -> c;
c -> d;
d -> e;
d -> f;
{rank=same; e -> f;}
}
Run Code Online (Sandbox Code Playgroud)

我想标记 A 和 B 之间的边缘以及 E 和 F 之间的边缘,对每个标签使用相同的字符串。我期待相同的输出,除了带有相同标签的更长的 A->B 和 E->F 边。
不幸的是,一旦我向这些边之一添加标签,总体布局就会看起来有点歪斜(如果我向 E->F 边添加标签,结果是相似的):
digraph test_alignment
{
{rank=same; a -> b [label="Label"];}
a -> c;
b -> c;
c -> d;
d -> e;
d -> f;
{rank=same; e -> f;}
}
Run Code Online (Sandbox Code Playgroud)

我对 graphviz 非常陌生,并且根据 Stack Overflow 上的许多问题,我一直在尝试不同的秩和约束组合,我尝试使用集群来查看它是否可以独立地保持顶部和底部正确对齐,并尝试使用dot、ccomp、gvpack 和neato 的组合产生了类似的结果。 …
我试图用 sfdp 可视化一个大图。该图有 5134 条边和 1735 个节点。当我尝试生成 .png 时:
sfdp -x -Goverlap=scale -Tpng data.dot > data.png
Run Code Online (Sandbox Code Playgroud)
我明白了:
sfdp: graph is too large for cairo-renderer bitmaps. Scaling by 0.687429 to fit
sfdp: failure to create cairo surface: out of memory
Segmentation fault.
Run Code Online (Sandbox Code Playgroud)
问题可能是我的节点不是点,因为当我生成没有“-Goverlap=scale”的 de .png 时,没有问题,但图形不可读。
有什么我可以做的吗?还有另一个工具可以做到这一点吗?
我正在使用 Linux 以点语言使用 Graphviz 工具。我想画三个正方形,一个在另一个里面。下面的代码不正确:
graph A
{ label="a";
subgraph cluster_A
{
b [shape=box,label="b"];
subgraph cluster_b
{
c[label="c",shape=box];
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个非常大的点格式有向图。假设有 500 万个节点和约 5000 万个链接。我想尽可能用相当少量的重叠和相当短的链接来绘制它,没有文本标签,只有节点的小鸡点。我可以使用什么工具来可视化这一点?
我知道这是一个巨大的数据量,并且需要很长时间才能处理,但我希望它需要不到一周的时间。
我正在使用 ANTLR4 生成 java 源代码的 AST,但我不得不转向 ANTLR3,因为我没有得到太多帮助和文档,而且确实很难继续。我设法生成 AST,但不是以可视格式生成。然后我遇到了一个很棒的答案 ,我确实能够在 DOT 文件中生成 AST,但有一个小问题。
我的代码:
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.ANTLRFileStream;
import org.antlr.runtime.tree.CommonTree;
import org.antlr.runtime.tree.DOTTreeGenerator;
import org.antlr.stringtemplate.StringTemplate;
class Main {
public static void main(String[] args) throws Exception {
parseFile("/home/satnam-sandhu/Workstation/ASTGenerator/resource/java/Blabla.java");
}
public static void parseFile(String f)throws Exception {
JavaLexer lexer = new JavaLexer(new ANTLRFileStream(f));
CommonTokenStream tokens = new CommonTokenStream(lexer);
JavaParser parser = new JavaParser(tokens);
CommonTree tree = (CommonTree)parser.compilationUnit().getTree();
DOTTreeGenerator gen = new DOTTreeGenerator();
StringTemplate st = gen.toDOT(tree);
System.out.println(st);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 gradle,所以我通过以下方式构建项目:
gradle clean …Run Code Online (Sandbox Code Playgroud) 如何获取输出hg history并将其转换为点文件?