簡體   English   中英

用 neato 而不是直線繪制樣條曲線

[英]Draw splines with neato instead of straight lines

我正在使用 python 程序繪制數據流圖:

g.render('output/data.gv', view=True)

由於我需要在特定位置對齊節點,因此我決定使用neato作為引擎:

g = Digraph(engine='neato')

然而,由於neato默認情況下繪制直線而不是樣條曲線(如dot那樣),這使得圖形看起來有點混亂(見下文)。 那么有沒有辦法通過python代碼配置讓它繪制樣條曲線呢?

示例(文件data.gv ):

digraph {
    nop1 [label=nop1 pos="0,6!"]
    o1 [label="o1
ALU" height=0.75 pos="0,5!"]
        nop1 -> o1
    o2 [label="o2
MUL" height=1.75 pos="1,4.5!"]
        nop1 -> o2
    o3 [label="o3
MUL" height=1.75 pos="2,4.5!"]
        nop1 -> o3
    o4 [label="o4
MUL" height=1.75 pos="3,4.5!"]
        nop1 -> o4
    o7 [label="o7
ALU" height=0.75 pos="4,5!"]
        nop1 -> o7
    o5 [label="o5
MUL" height=1.75 pos="0,2.5!"]
        o3 -> o5
        o4 -> o5 
    o6 [label="o6
ALU" height=0.75 pos="1,3!"]
        o4 -> o6
    o8 [label="o8
ALU" height=0.75 pos="0,1!"]
        o3 -> o8
        o5 -> o8
    nop2 [label="nop2
NOP" height=-0.25 pos="0,0!"]
        o1 -> nop2
        o2 -> nop2
        o6 -> nop2
        o7 -> nop2
        o8 -> nop2
}

上面代碼生成的圖

根據 Marichyasana 的評論,將 graph_attr 設置為包含-splines=true -sep=1

    from graphviz import Graph

    # A simple demonstration graph
    g = Graph(name="we", engine='neato')
    g.node('1', pos='1,1!', shape='circle')
    g.node('2', pos='2,1!', shape='circle')
    g.node('3', pos='3,1!', shape='circle')
    g.edge('1', '2')
    g.edge('2', '3')
    g.edge('1', '3')

    # The solution
    g.graph_attr['splines'] = 'true'
    g.graph_attr['sep'] = '1'

    g.format = 'jpg'
    g.render('test', view=False)

沒有分配給 graph_attr 的更改(我沒有足夠的聲譽來發布圖像):

1個

固定的:

2個

增加間隔 ( 'sep' ) 是可選的,它將使線遠離其他節點的中心。 值太大時樣條線將不會用於邊緣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM