[英]Force an arrow to enter a node from the left in graphviz python
我正在嘗試制作一個漂亮的圖表(見圖),但有一定的要求。 看起來像半矩形的節點稱為注釋,箭頭應該從左側而不是底部進入節點。 有誰知道如何在 graphviz python 中執行此操作。
關於代碼的一些評論: model object 包含邊緣對象。 每條邊 object 包含一個源節點和一個目標節點,它們基本上是字符串對象。
我還保留了一個節點列表,這些節點應該具有我使用該形狀的稱為注釋的半矩形形狀。 總之,我唯一想要的就是讓傳入的邊緣向左移動。
確切的代碼可以在下面找到:
g = Digraph('G', filename='./output/model_' + str(mi), format='png',strict=True)
g.graph_attr.update(rankdir='BT')
g.attr('node',shape='note')
sources= list()
targets = list()
annotations=list()
PossibleModel.MAX_DEPTH = 3
"""Let us first see what the possible inputs are"""
"""
for edge in model.get_edges():
sources.append(str(edge.source))
targets.append(str(edge.target))
"""
for edge in model.get_edges():
sources.append(edge.source.small_string2())
targets.append(edge.target.small_string2())
difference = list(set(sources) - set(targets))
print('difference',difference)
for edge in model.get_edges():
edge_contained = ''
for rule in br_rules:
if str(edge.source) in rule or str(edge.target) in rule:
edge_contained += rule + '\n'
if edge_contained == '':
g.edge(edge.source.small_string2(), edge.target.small_string2(),label=str(edge.weight),color='red')
g.edge(edge.source.small_string2(), edge.source.small_string3(),color='black',arrowhead='none',style='dashed')
g.edge(edge.target.small_string2(), edge.target.small_string3(),color='black',arrowhead='none',style='dashed')
annotations.append(edge.source.small_string3())
annotations.append(edge.target.small_string3())
else:
g.attr('edge', color='blue')
g.edge(str(edge.source), str(edge.target), label=edge_contained)
for node in difference:
g.node(node,style='rounded',shape='ellipse')
for node in targets:
g.node(node, shape='box')
for node in annotations:
g.node(node,color='transparent', image='test.png',fontsize='11')`
使用“端口”(參見第 18 頁“節點端口” http://www.graphviz.org/pdf/dotguide.pdf和https://graphviz.org/docs/attr-types/portPos/ )
所以而不是a -> b試試a -> b:w ( :w表示西邊或左邊)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.