Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pygraphviz中具有不同形状的节点_Python_Graphviz_Pygraphviz - Fatal编程技术网

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()
就是我要找的。