pygraphviz 中不同形状的节点
Nodes with different shapes in pygraphviz
我正在尝试在 pygraphviz
中可视化一个自动机,例如 graphviz documentation 中的示例:
我发现节点形状可以像这样改变:
A.node_attr['shape']='circle' # A is a pygraphviz AGraph
这会改变所有节点的形状,但我想为不同的节点(一些 'circle'
和一些 'doublecircle'
)使用不同的节点形状。有什么建议吗?
注意:我正在使用 pygraphviz
因为我想使用 networkx
图形对象并且这些对象可以转换为 pygraphviz
的 AGraph
对象].此外,显然 networkx
无法生成这样的图形可视化。
所有信息都包含在 pygraphviz 文档 (http://pygraphviz.github.io/documentation/pygraphviz-1.5/tutorial.html#nodes-and-edges) 的属性段落中,其中指出:
要设置图、节点和边的默认属性,请使用 graph_attr、node_attr 和 edge_attr 字典
G.graph_attr['label']='Name of graph'
G.node_attr['shape']='circle'
G.edge_attr['color']='red'
可以在初始化图的时候设置图的属性
G=pgv.AGraph(ranksep='0.1')
添加节点或边时可以添加属性,
G.add_node(1, color='red')
G.add_edge('b','c',color='blue')
或通过节点或边属性字典,
n=G.get_node(1)
n.attr['shape']='box'
e=G.get_edge('b','c')
e.attr['color']='green'
图中的每个节点都是 Node
class 的实例,节点属性设置为 ItemAttribute
。这意味着您可以单独更改节点的属性。因此,您只需要访问节点。与 iternodes
相比,这是可能的,它是 AGraph
节点上的迭代器。下面是一起使用 networkx
和 pygraphviz
并更改节点属性的示例:
import networkx as nx
import pygraphviz as pgv
G = nx.DiGraph()
nodes = {'a', 'b', 'c'}
edges = {('a', 'b'), ('b', 'c'), ('a', 'c')}
G.add_nodes_from(nodes)
G.add_edges_from(edges)
A = nx.nx_agraph.to_agraph(G)
shapes = ['circle', 'box']
for i, node in enumerate(A.iternodes()):
node.attr['shape'] = shapes[i%2]
A.layout()
A.draw('graph.png')
我正在尝试在 pygraphviz
中可视化一个自动机,例如 graphviz documentation 中的示例:
我发现节点形状可以像这样改变:
A.node_attr['shape']='circle' # A is a pygraphviz AGraph
这会改变所有节点的形状,但我想为不同的节点(一些 'circle'
和一些 'doublecircle'
)使用不同的节点形状。有什么建议吗?
注意:我正在使用 pygraphviz
因为我想使用 networkx
图形对象并且这些对象可以转换为 pygraphviz
的 AGraph
对象].此外,显然 networkx
无法生成这样的图形可视化。
所有信息都包含在 pygraphviz 文档 (http://pygraphviz.github.io/documentation/pygraphviz-1.5/tutorial.html#nodes-and-edges) 的属性段落中,其中指出:
要设置图、节点和边的默认属性,请使用 graph_attr、node_attr 和 edge_attr 字典
G.graph_attr['label']='Name of graph' G.node_attr['shape']='circle' G.edge_attr['color']='red'
可以在初始化图的时候设置图的属性
G=pgv.AGraph(ranksep='0.1')
添加节点或边时可以添加属性,
G.add_node(1, color='red') G.add_edge('b','c',color='blue')
或通过节点或边属性字典,
n=G.get_node(1) n.attr['shape']='box'
e=G.get_edge('b','c') e.attr['color']='green'
图中的每个节点都是 Node
class 的实例,节点属性设置为 ItemAttribute
。这意味着您可以单独更改节点的属性。因此,您只需要访问节点。与 iternodes
相比,这是可能的,它是 AGraph
节点上的迭代器。下面是一起使用 networkx
和 pygraphviz
并更改节点属性的示例:
import networkx as nx
import pygraphviz as pgv
G = nx.DiGraph()
nodes = {'a', 'b', 'c'}
edges = {('a', 'b'), ('b', 'c'), ('a', 'c')}
G.add_nodes_from(nodes)
G.add_edges_from(edges)
A = nx.nx_agraph.to_agraph(G)
shapes = ['circle', 'box']
for i, node in enumerate(A.iternodes()):
node.attr['shape'] = shapes[i%2]
A.layout()
A.draw('graph.png')