Python 当输入节点有冒号时,write_dot(…)生成冗余节点
产生 这是由于冒号引起的Python 当输入节点有冒号时,write_dot(…)生成冗余节点,python,graphviz,networkx,pygraphviz,Python,Graphviz,Networkx,Pygraphviz,产生 这是由于冒号引起的 so.dot: import networkx as nx G = nx.DiGraph() G.add_edge("A: test", 'B: test') nx.write_dot(G,'so.dot') 请注意,它会剥离冒号及其后面的所有内容 如果我手动将此更改为 strict digraph G { A; B; "A: test" -> "B: test"; } 很好。事实上,有没有节点并不重要,只要有边就行 如果删除:和t之间的空格,则只生成A
so.dot
:
import networkx as nx
G = nx.DiGraph()
G.add_edge("A: test", 'B: test')
nx.write_dot(G,'so.dot')
请注意,它会剥离冒号及其后面的所有内容
如果我手动将此更改为
strict digraph G {
A;
B;
"A: test" -> "B: test";
}
很好。事实上,有没有节点并不重要,只要有边就行
如果删除:
和t
之间的空格,则只生成A和B
我试过用各种方法逃离结肠,但似乎不起作用。显然,我每次都可以手动删除节点,但最好是使用脚本解决方案。(而不是通过.dot文件的第二个脚本)
有人有主意吗?这不是bug,而是GraphViz点语言语法的一个特性。节点名称中的冒号用于指定输入或输出端口 从GraphViz文档中 portPos 指示边在节点上的目标位置的修改器。它的格式为
portname(:compass\u point)
或compass\u point
。如果
如果使用第一个表单,则相应的节点必须具有
形状,其中一个字段具有给定的端口名,或具有
类似HTML的标签,其中一个组件的PORT
属性设置为
端口名
然而,据我们所知,通过向Graphviz传递一个引用的节点名,您可以克服这种行为,例如
strict digraph G {
"A: test";
"B: test";
"A: test" -> "B: test";
}
完美的出于好奇,你是如何找到答案的?什么搜索词?@svdc:这是一个多阶段的过程。:)FWIW,尽管我不是Graphviz/DOT专家,但我已经断断续续地使用它超过10年了(在我开始使用Python之前),所以我已经有了一些搜索Graphviz信息的实践。但我必须承认,我以前不知道港口,或者我只是忘记了它们我从未使用过任何Python Graphviz模块,我的(公认的简单)程序只是直接创建点代码。
G.add_edge("'A: test'", "'B: test'")