【问题标题】:Nodes with different shapes in pygraphvizpygraphviz中不同形状的节点
【发布时间】:2020-04-23 07:44:46
【问题描述】:

我正在尝试在pygraphviz 中可视化一个自动机,就像graphviz documentation 中的示例:

我发现节点形状可以更改为:

A.node_attr['shape']='circle' # A is a pygraphviz AGraph

这会改变所有节点的形状,但我想为不同的节点使用不同的节点形状(一些'circle' 和一些'doublecircle')。有什么建议吗?

注意:我使用pygraphviz 是因为我想使用networkx 图形对象,这些对象可以转换为pygraphvizAGraph 对象。此外,显然networkx 无法生成这样的图形可视化。

【问题讨论】:

  • 最好展示一个小的完整 MWE 来表明您的问题,即只有几个节点/边的示例。
  • @albert 你是对的,但我的问题的重点是关于使用不同形状的节点,如果有人告诉我如何只为两个节点做这件事,这就足够了。
  • 由于我不知道 pygraphviz,如果没有看到一些代码,我无法给出建议。如果我看到一些代码,我可能会给出一个线索(我希望每个节点也有一个属性形状,否则可以首先为例如双圆节点设置节点形状,然后为圆节点设置节点形状(类似于您提到的文档中的示例(以及那里提到的 gv 文件)。
  • 看看文档pygraphviz.github.io/documentation/pygraphviz-1.5/…,我认为在标题属性下确实有所需的信息(即使没有对“graphviz 文档进行简单的谷歌搜索”,我也指向了。

标签: python graphviz pygraphviz


【解决方案1】:

图中的每个节点都是Node 类的一个实例,节点属性由ItemAttribute 设置。这意味着您可以单独更改节点的属性。因此,您只需要访问节点。这与iternodes 相比是可能的,AGraph 节点上的迭代器。下面是一起使用networkxpygraphviz 并更改节点属性的示例:

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')

【讨论】:

    【解决方案2】:

    所有信息都包含在 pygraphviz 文档 (http://pygraphviz.github.io/documentation/pygraphviz-1.5/tutorial.html#nodes-and-edges) 的“属性”段落中:

    要为图、节点和边设置默认属性,请使用 graph_attr、node_attr 和 edge_attr 字典

    G.graph_attr['label']='图名' 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'

    【讨论】:

    • 谢谢@albert! get_node() 是我要找的。​​span>
    猜你喜欢
    • 2019-07-21
    • 2015-06-25
    • 2021-03-30
    • 2015-03-01
    • 1970-01-01
    • 2022-12-22
    • 2017-06-30
    • 2023-04-05
    • 2010-11-18
    相关资源
    最近更新 更多