有谁知道如何将换行符放在节点的标签上?\n不起作用 - 而是出现一些新节点.
我正在构建一个点文件来表示计算机硬件以及与网络交换机和显示器的物理连接.我通过点程序处理它看起来不错,但我认为我真的希望它由neato处理以创建一个更"自由形式"的图片,因为它开始出现问题.现在当我用neato运行我的大文件时,一切都重叠了.
我试图找出定义overlap属性的语法.下面是我的点文件的子集.
graph g {
node [shape=record,height=.1];
PC8[label="{{<GigE1>GigE1|<GigE2>GigE2}|{<name>PC8}|{<dvi1>dvi1|<dvi2>dvi2|<dvi3>dvi3|<dvi4>dvi4}}"];
PC9[label="{{<GigE1>GigE1|<GigE2>GigE2}|{<name>PC9}|{<dvi1>dvi1|<dvi2>dvi2|<dvi3>dvi3|<dvi4>dvi4}}"];
C1[label = "{{<dvi1>dvi1}|{<name>C1}}"];
C2[label = "{{<dvi1>dvi1}|{<name>C2}}"];
C3[label = "{{<dvi1>dvi1}|{<name>C3}}"];
C4[label = "{{<dvi1>dvi1}|{<name>C4}}"];
D1[label = "{{<dvi1>dvi1}|{<name>D1}}"];
D2[label = "{{<dvi1>dvi1}|{<name>D2}}"];
"PC8":dvi1 -- "C1":dvi1;
"PC8":dvi2 -- "C2":dvi1;
"PC8":dvi3 -- "C3":dvi1;
"PC8":dvi4 -- "C4":dvi1;
"PC9":dvi1 -- "D1":dvi1;
"PC9":dvi2 -- "D2":dvi1;
}
Run Code Online (Sandbox Code Playgroud) 是否有免费(如"欢呼"),与graphviz或其他图形的Linux兼容,交互式可视化编辑器? aptitude好像在画一个空白.
编辑:"欢呼"意味着"啤酒"和"演讲". meta-edit:我想它应该是"像海滩一样自由".
编辑2:也许一个合适的svg编辑器将是一个更现实的目标.我基本上想要一些可以用来方便地创建标记形状和连接它们的线的集合.实际上,从这些数据中提取图形可能会更具理论意义,因为它包括语义数据(图形)和表示数据(它在屏幕上的排列方式,使用的颜色等).有没有办法用inkscape或其他一些免费的矢量图形编辑器方便地布置标记的形状?我真的需要重新排列节点,并且(重新)在其中流动文本,以最大的方便发生.
我也意识到这确实是一个超级用户的问题.当我找到一个似乎可能为我提供答案的现有问题时,我打算将它重新发布在那里:dia.
编辑3:dia似乎很有用,除了它似乎不可能以任何有用的方式(即除插入手动换行符之外的任何方式)获取节点对象的文本内容.这是一种交易破坏者,因为它破坏了大部分便利因素,这是我以这种方式做事的动机而不是文本编辑器或笔和纸.但是它支持某种事件模型和基于Python的脚本,所以我将稍微挖掘一下,看看我是否可以使用python来包装文本以响应内容更改.除非你们中的一个人有更好的想法..?基本上我想要通过GUI交互显式设置节点大小,并让内容换行和重新缩放(在一定的字体大小范围内)以适应它.富文本非常有用.
换句话说,这实际上是一个有效的SO问题,因为它似乎需要编码.
我正在使用graphviz来可视化我正在解析的语言的AST.我想要包含源代码(作为标签),但graphviz对齐标签内的文本,这与我的缩进混淆(代码是缩进敏感的).这是问题的一个例子,第二行代码不应缩进:

这是生成的.dot文件的相关部分:
graph [fontname=Courier,fontsize=10.0,labeljust=l,nojustify=true];
node [shape=box,width=0.2,height=0.2,fontname=Courier,fontsize=10.0,penwidth=0.5];
edge [weight=1.2,penwidth=0.5,fontname=Courier,fontsize=10.0,labeljust=c];
labelloc="t";
label="\ndef square(a, b) -> a * b\ndef dotProduct(a, b) -> \n a.x * b.x + a.y * b.y\n";
Run Code Online (Sandbox Code Playgroud) 默认情况下,Graphviz中的边标签位于边缘的右侧.我正在寻找一种方法将标签放在边缘上,以边缘为中心.(它仍然可读,因为我正在改变边缘的颜色).
有任何想法吗?
对于我的应用程序,我需要同时(在同一图表上)表示两个关系:一个是simmetric,另一个不是.
目标:
有没有办法用点做这个?
我想同时渲染多个树,并将所有根节点和所有叶节点放在同一级别上.
这是我正在尝试做的一个例子.根节点A和X在同一级别上,叶节点B,D和Z也是如此.

我没有成功尝试将根放在一个等级中,然后留下另一个等级,如下所示:
digraph G {
rankdir = TB;
subgraph {
A -> B
A -> C
C -> D
X -> Y
rank = same; A; X;
rank = same; B; D; Y;
} /* closing subgraph */
}
Run Code Online (Sandbox Code Playgroud)
并且在一切都处于相同等级的情况下得到了这个结果.

关于我应该尝试什么的任何建议?我已经确定了根和叶子.
实际上我已经下载了graphviz的GUI(不记得该网站),表示他们已经赢得了Apple设计奖.但该工具实际上只显示我创建的*.dot文件.而已.它被称为"Graphviz"...我想有更好的工具可以使用Graphviz技术.
我试过这个:链接文字
虽然他们说他们赢得了Apple设计奖,但我真的看不到任何特殊的GUI.界面很差.
我正在尝试使用点显示从右到左(即向后)的边缘:
C <- A -> B
Run Code Online (Sandbox Code Playgroud)
我能做的最好的事情是:
digraph {
a -> b;
c -> a [dir="back"];
{rank=same;c a b}
}
Run Code Online (Sandbox Code Playgroud)
..这很好,除了我不喜欢使用c -> a边缘指向另一个方向.
所以我想分享这个解决方案(似乎没有在SO上提及),并检查我是否遗漏了一些明显的东西.
边缘上的Rank属性具有五个值"same","min","source","max","sink".除了"相同",我不知道何时使用其他值.
min
\begin{dotpic}
rankdir=LR;
size="7,5";
node[shape=circle];
C->A;
{rank=min;A;B}
B->D
A->B;
\end{dotpic}
max
\begin{dotpic}
rankdir=LR;
size="7,5";
node[shape=circle];
C->A;
{rank=max;A;B}
B->D
A->B;
\end{dotpic}
source
\begin{dotpic}
rankdir=LR;
size="7,5";
node[shape=circle];
C->A;
{rank=source;A;B}
B->D
A->B;
\end{dotpic}
sink
\begin{dotpic}
rankdir=LR;
size="7,5";
node[shape=circle];
C->A;
{rank=sink;A;B}
B->D
A->B;
\end{dotpic}
Run Code Online (Sandbox Code Playgroud)
通过对我的vim环境的测试,我可以发现这些值存在一些差异.但不知道它们到底是什么.