【问题标题】:Setting graph attributes in pygraph在 pygraph 中设置图形属性
【发布时间】:2023-03-08 13:48:02
【问题描述】:

我在documentation of pygraph 中找到了如何更改attributes of the nodes and the edges,但我没有找到有关如何更改图表属性的帮助。

我没有运气:

gr = graph()
gr.__setattr__('aspect',2)

你有什么推荐的?

谢谢!

[更新] 我也试过了:

gr = graph()
gr.__setattr__('rotate',90)
gr.rotate = 90
gr.color = 'red'
setattr(gr,'bgcolor','red')

[更新 2] 来自网站的示例代码,用于更改属性的不同想法:

#!/usr/bin/env python

# Copyright (c) 2007-2008 Pedro Matiello <pmatiello@gmail.com>
# License: MIT (see COPYING file)

# Import graphviz
import sys
sys.path.append('..')
sys.path.append('/usr/lib/graphviz/python/')
sys.path.append('/usr/lib64/graphviz/python/')
import gv

# Import pygraph
from pygraph.classes.graph import graph
from pygraph.classes.digraph import digraph
from pygraph.algorithms.searching import breadth_first_search
from pygraph.readwrite.dot import write

# Graph creation
gr = graph()

gr.__setattr__('rotate',90)
gr.rotate = 90
gr.color = 'red'
setattr(gr,'bgcolor','red')

# Add nodes and edges
gr.add_nodes(["Portugal","Spain","France","Germany","Belgium","Netherlands","Italy"])
gr.add_nodes(["Switzerland","Austria","Denmark","Poland","Czech Republic","Slovakia","Hungary"])
gr.add_nodes(["England","Ireland","Scotland","Wales"])

gr.add_edge(("Portugal", "Spain"))
gr.add_edge(("Spain","France"))
gr.add_edge(("France","Belgium"))
gr.add_edge(("France","Germany"))
gr.add_edge(("France","Italy"))
gr.add_edge(("Belgium","Netherlands"))
gr.add_edge(("Germany","Belgium"))
gr.add_edge(("Germany","Netherlands"))
gr.add_edge(("England","Wales"))
gr.add_edge(("England","Scotland"))
gr.add_edge(("Scotland","Wales"))
gr.add_edge(("Switzerland","Austria"))
gr.add_edge(("Switzerland","Germany"))
gr.add_edge(("Switzerland","France"))
gr.add_edge(("Switzerland","Italy"))
gr.add_edge(("Austria","Germany"))
gr.add_edge(("Austria","Italy"))
gr.add_edge(("Austria","Czech Republic"))
gr.add_edge(("Austria","Slovakia"))
gr.add_edge(("Austria","Hungary"))
gr.add_edge(("Denmark","Germany"))
gr.add_edge(("Poland","Czech Republic"))
gr.add_edge(("Poland","Slovakia"))
gr.add_edge(("Poland","Germany"))
gr.add_edge(("Czech Republic","Slovakia"))
gr.add_edge(("Czech Republic","Germany"))
gr.add_edge(("Slovakia","Hungary"))

# Draw as PNG
dot = write(gr)
gvv = gv.readstring(dot)
gv.layout(gvv,'dot')
gv.render(gvv,'png','europe.png')

【问题讨论】:

  • @Framester:这些链接不指向 pygraph 文档...
  • 我知道这不是你想要的,但我喜欢 matplotlib。它具有与数学实验室绘图相同的外观和感觉
  • @phooji - 谢谢,我更正了链接。 @Andrew - 感谢您的意见。我刚试过。它没有给出错误,但输出没有变化。 ://
  • 当您尝试设置这些属性时会发生什么?解释器是否返回错误?如果有,是什么?
  • 嗨乔希,解释器没有返回错误。它运行并打印不考虑属性的预期输出。

标签: python graphviz pygraph


【解决方案1】:

显然您可以使用gv.setv() 在图表上设置属性。

import gv
g = gv.digraph('19261920')
gv.setv(g, 'overlap', 'compress')

我通过检查/usr/include/graphviz/gv.igv.py 接口定义文件找到了gv.setv()

在 interwebz 上搜索 "import gv" overlap setv 将我带到 this old post,它演示了 gv.setv() 的使用。

我发现这个PDF gv_python man page 包含更多关于setv 的文档。

对于这么简单的事情来说,这是相当多的调查,嗯?

【讨论】:

    【解决方案2】:

    因此,我自己进行了更多研究,发现pygraphviz 提供了我需要的东西。这是使用pygraphviz 并接受属性的pygraph 示例。它也更短,因为如果所有节点都通过边连接,则不必指定节点。

    #!/usr/bin/env python
    
    # Copyright (c) 2007-2008 Pedro Matiello <pmatiello@gmail.com>
    # License: MIT (see COPYING file)
    
    # Import pygraphviz
    import pygraphviz as pgv
    
    # Graph creation and setting of attributes
    gr = pgv.AGraph(rotate='90',bgcolor='lightgray')
    
    # Add nodes and edges
    gr.add_edge(("Portugal", "Spain"))
    gr.add_edge(("Spain","France"))
    gr.add_edge(("France","Belgium"))
    gr.add_edge(("France","Germany"))
    gr.add_edge(("France","Italy"))
    gr.add_edge(("Belgium","Netherlands"))
    gr.add_edge(("Germany","Belgium"))
    gr.add_edge(("Germany","Netherlands"))
    gr.add_edge(("England","Wales"))
    gr.add_edge(("England","Scotland"))
    gr.add_edge(("Scotland","Wales"))
    gr.add_edge(("Switzerland","Austria"))
    gr.add_edge(("Switzerland","Germany"))
    gr.add_edge(("Switzerland","France"))
    gr.add_edge(("Switzerland","Italy"))
    gr.add_edge(("Austria","Germany"))
    gr.add_edge(("Austria","Italy"))
    gr.add_edge(("Austria","Czech Republic"))
    gr.add_edge(("Austria","Slovakia"))
    gr.add_edge(("Austria","Hungary"))
    gr.add_edge(("Denmark","Germany"))
    gr.add_edge(("Poland","Czech Republic"))
    gr.add_edge(("Poland","Slovakia"))
    gr.add_edge(("Poland","Germany"))
    gr.add_edge(("Czech Republic","Slovakia"))
    gr.add_edge(("Czech Republic","Germany"))
    gr.add_edge(("Slovakia","Hungary"))
    
    # Draw as PNG
    gr.layout(prog='dot')
    gr.draw('europe.png')
    

    【讨论】:

      【解决方案3】:

      我不知道pygraph,但我认为你在python中设置属性的方式是:

      setattr(object, attr, value)
      setattr(gr, 'aspect', 2)
      

      我的意思是,你尝试过 gr.aspect = 2,对吧?

      【讨论】:

      • 您好 x10,感谢您提出这个新想法。我尝试了您的两个想法(请参阅 Q 更新),但输出保持不变。
      【解决方案4】:

      试试下面的

      import pydot
      
      dot = write(gr)
      dotG = pydot.graph_from_dot_data(dot)
      params = { 'rotate': 10, 'color': 'red'}
      dotG.set_graph_defaults(**params)
      dot = dotG.to_string()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-20
        • 2012-11-04
        • 2017-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-09
        相关资源
        最近更新 更多