0

我有一个相互关联的项目列表,我知道他们最终会构建一个图表,但数据没有以任何方式排序。

PMO-100 -> SA-300
SA-100 -> SA-300
SA-100 -> SA-200
PMO-100 -> SA-100

在graphViz api的python示例中,我意识到如果您知道它是顶级节点并且可以向下运行并构建所有关系,您几乎可以生成一个图形。

因为我得到了一个分类列表(我只知道它是一个图表,因为所有关系都是从一个点计算出来的) - 有没有办法在这些数据之上构建一个图表?

更新:对这个问题的第一条评论表明我没有正确解释我所追求的。实际上,以下代码为您提供了正确的图表:

gr = pydot.Dot(graph_type='digraph')
    for link in graph.links:
        edge = pydot.Edge(link.outwardIssue.key, link.inwardIssue.key)
        gr.add_edge(edge)
    gr.write('graph.png',format='png')

我的问题真的是 - 我如何为单个节点着色或更改特定边缘的箭头类型?

4

3 回答 3

1

无需为 graphviz 识别顶部节点。只需添加所有节点和边,然后让它完成其余的工作。例如:

import pydot
graph = pydot.Dot('graphname', graph_type='digraph') 
pmo100 = pydot.Node("PMO-100")
sa300 = pydot.Node("SA-300")
sa100 = pydot.Node("SA-100")
sa200 = pydot.Node("SA-200")
graph.add_edge(pydot.Edge(pmo100, sa300))
graph.add_edge(pydot.Edge(sa100, sa300))
graph.add_edge(pydot.Edge(sa100, sa200))
graph.add_edge(pydot.Edge(pmo100, sa100))
graph.write_png('example1_graph.png')

这将产生以下图像:

结果

您可以在http://pythonhaven.wordpress.com/2009/12/09/generating_graphs_with_pydot/找到更多信息

于 2013-04-16T10:10:41.220 回答
0

如何更改节点的颜色:

node.attr["color"] = '红色'

改变箭头的形状,同样的方法

edge.attr["箭头"] = "..."

于 2014-03-11T13:09:56.523 回答
0

试用pygraph包,它会根据关系语句(数据)生成有向图。不管数据是否排序。

因此(如您的情况)如果我们有以下数据(在三元关系中),则很容易生成相应的图表:

第一种方式

s1 = "PMO-100 -> SA-300"
s2 = "SA-100 -> SA-300"
s3 = "SA-100 -> SA-200"
s4 = "PMO-100 -> SA-100"

from pygraph.dgraph import PyGraph

g = PyGraph()

g.add_relation(s1)
g.add_relation(s2)
g.add_relation(s3)
g.add_relation(s4)

g.draw_graph(label=False)

它将产生:

在此处输入图像描述

或者您甚至可以从文件中读取关系。

第二种方式

说,你有data.txt

PMO-100 -> SA-300
SA-100 -> SA-300
SA-100 -> SA-200
PMO-100 -> SA-100

在 4 loc 中更容易:

from pygraph.dgraph import PyGraph

g = PyGraph()

g.file_relations("data.txt")

g.draw_graph(label=False)

两种方式的结果都是一样的:

在此处输入图像描述

于 2015-03-09T01:26:35.983 回答