我有一个彼此相关的项目列表,我知道他们最终会构建一个图表,但数据没有以任何方式排序。
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')
我的问题是 - 我如何为单个节点着色或更改特定边缘的箭头类型?
答案 0 :(得分: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/
找到更多信息答案 1 :(得分:0)
如何更改节点的颜色:
node.attr [“color”] ='red'
改变箭头的形状,方法相同
edge.attr [“arrowhead”] =“......”
答案 2 :(得分: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)
两种方式的结果都是一样的: