Python pygraphviz中具有不同形状的节点
我试图在Python pygraphviz中具有不同形状的节点,python,graphviz,pygraphviz,Python,Graphviz,Pygraphviz,我试图在pygraphviz中可视化一个自动机,如中的示例: 我发现节点形状可以更改如下: A.node_attr['shape']='circle' # A is a pygraphviz AGraph 这会更改所有节点的形状,但我希望为不同的节点使用不同的节点形状(一些'circle'和一些'doublecircle')。有什么建议吗 注意:我使用pygraphviz是因为我想使用networkx图形对象,这些对象可以转换为pygraphviz的AGraph对象。另外,显然,networ
pygraphviz
中可视化一个自动机,如中的示例:
我发现节点形状可以更改如下:
A.node_attr['shape']='circle' # A is a pygraphviz AGraph
这会更改所有节点的形状,但我希望为不同的节点使用不同的节点形状(一些'circle'
和一些'doublecircle'
)。有什么建议吗
注意:我使用
pygraphviz
是因为我想使用networkx
图形对象,这些对象可以转换为pygraphviz
的AGraph
对象。另外,显然,networkx
无法生成这样的图形可视化。所有信息都包含在pygraphviz文档()的段落属性中,其中说明:
要设置图、节点和边的默认属性,请使用图属性、节点属性和边属性字典
G.graph_attr['label']='graph的名称'
G.node_attr['shape']='circle'
G.edge_attr['color']='red'
可以在初始化图形时设置图形属性
G=pgv.AGraph(ranksep='0.1')
可以在添加节点或边时添加属性
G.add_节点(1,color='red')
G.添加边('b'、'c',颜色='蓝色')
或者通过节点或边属性字典
n=G.get_节点(1)
n、 属性['shape']='box'
e=G.get_边('b','c'))
e、 属性['color']='green'
图中的每个节点都是
节点
类的一个实例,节点属性使用项属性
设置。这意味着您可以单独更改节点的属性。因此,您只需要访问节点。这在iternodes
中是可能的,iternodes是AGraph
节点上的迭代器。下面是一起使用networkx
和pygraphviz
并更改节点属性的示例:
将networkx导入为nx
将pygraphviz作为pgv导入
G=nx.DiGraph()
节点={a',b',c'}
边={('a','b'),('b','c'),('a','c')}
G.从(节点)添加节点
G.从(边)添加边
A=nx.nx\u图形到\u图形(G)
形状=['圆形','长方体']
对于i,枚举中的节点(A.iternodes()):
node.attr['shape']=shapes[i%2]
A.布局()
A.draw('graph.png')
最好展示一个小的完整的MWE,说明您的问题,例如,一个只有两个节点/边的示例。@albert您是对的,但我的问题的重点是如何对节点使用不同的形状,如果有人向我展示如何仅对两个节点执行此操作,这就足够了。因为我不知道pygraphviz,我不能在没有看到一些代码的情况下给出建议。如果我看到一些代码,我可能会给出一个线索(我希望每个节点都有一个属性形状,或者可以先为双圆节点设置节点形状,然后为圆节点设置节点形状(类似于您提到的文档中的示例(以及文中提到的gv文件)。请看一下文档,我想在标题“属性”下正好有所需的信息(即使没有在谷歌上搜索“graphviz文档”,我也指向了这些信息)。谢谢@albert!get_node()
就是我要找的。