2016-01-26 29 views
10

Ho il seguente file .dot.Forza angoli quadrati sui bordi con graphviz

digraph 
{ 
    node [color=Limegreen,fontcolor=Limegreen,shape=oval] 
    ilocus [label="iLocus"] 
    gilocus [label="giLocus"] 
    pilocus [label="piLocus"] 
    nilocus [label="niLocus"] 
    silocus [label="siLocus"] 
    cilocus [label="ciLocus"] 
    filocus [label="fiLocus"] 
    iilocus [label="iiLocus"] 

    node [color=Blue,fontcolor=Blue,shape=diamond] 
    containgene [label="Contains gene(s)?"] 
    proteincoding [label="Protein coding?"] 
    multiplegenes [label="Multiple genes?"] 
    geneflank [label="Flanked by genes\non both sides?"] 

    ilocus -> containgene 
    containgene:e -> geneflank [xlabel="No"] 
    geneflank:e -> filocus [xlabel="No"] 
    geneflank:w -> iilocus [xlabel="Yes"] 
    containgene:w -> gilocus [xlabel="Yes"] 
    gilocus -> proteincoding 
    proteincoding:e -> nilocus [xlabel="No"] 
    proteincoding:w -> pilocus [xlabel="Yes"] 
    pilocus -> multiplegenes 
    multiplegenes:e -> silocus [xlabel="No"] 
    multiplegenes:w -> cilocus [xlabel="Yes"] 
} 

Rendering con graphviz ottengo il seguente.

Graphviz take 1

C'è un modo posso forzare i bordi di avere gli angoli quadrati, piuttosto che gli angoli arrotondati? L'attributo splines=ortho dalla documentazione sembra essere progettato per questo in linea di principio, ma in pratica ottengo solo linee rette quando aggiungo graph [splines=ortho] al mio digrafo.

Graphviz take 2

qualsiasi modo per ottenere angoli quadrati sui bordi con graphviz? Qualcosa di simile a quanto segue:

------ Multiple genes? ----- 
    |       | 
    | N      Y | 
    |       | 
    v       V 
siLocus     ciLocus 

risposta

0

Si può semplicemente utilizzare splines=false (link to GraphvizFiddle).

+0

Forse la mia spiegazione non era chiaro Ho aggiornato per mostrare con precisione cosa intendo per "angoli quadrati". –

+0

Ah scusa, ho frainteso. Purtroppo orto fa raramente ciò che si vuole che faccia ... – marapet

3

Forse si può iniziare utilizzando splines=line

digraph 
{ 
    splines=line 
    ... 

che vi darà questo grafico:

Graph using splines=line

Da lì si potrebbe aver bisogno di posizionare manualmente i nodi, o inserire i nodi nascosti e bordi come

digraph 
{ 
    splines=line 

    node [color=Limegreen,fontcolor=Limegreen,shape=oval] 
    ilocus [label="iLocus"] 
    gilocus [label="giLocus"] 
    pilocus [label="piLocus"] 
    nilocus [label="niLocus"] 
    silocus [label="siLocus"] 
    cilocus [label="ciLocus"] 
    filocus [label="fiLocus"] 
    iilocus [label="iiLocus"] 

    node [color=Blue,fontcolor=Blue,shape=diamond] 
    containgene [label="Contains gene(s)?"] 
    proteincoding [label="Protein coding?"] 
    multiplegenes [label="Multiple genes?"] 
    geneflank [label="Flanked by genes\non both sides?"] 

    spacer1 [label="xxxx",style=invis] 
    {rank=same gilocus spacer1 geneflank} 
    gilocus -> spacer1 -> geneflank [style=invis] 

    ilocus -> containgene 
    containgene:e -> geneflank [xlabel="No"] 
    geneflank:e -> filocus [xlabel="No"] 
    geneflank:w -> iilocus [xlabel="Yes"] 
    containgene:w -> gilocus [xlabel="Yes"] 
    gilocus -> proteincoding 
    proteincoding:e -> nilocus [xlabel="No"] 
    proteincoding:w -> pilocus [xlabel="Yes"] 
    pilocus -> multiplegenes 
    multiplegenes:e -> silocus [xlabel="No"] 
    multiplegenes:w -> cilocus [xlabel="Yes"] 
} 

che produce

enter image description here

In alternativa, è possibile inserire spazi nei migliori etichette per rendere i nodi più bassi si allineano meglio:

digraph 
{ 
    splines=line 

    node [color=Limegreen,fontcolor=Limegreen,shape=oval] 
    ilocus [label="iLocus"] 
    gilocus [label="giLocus"] 
    pilocus [label="piLocus"] 
    nilocus [label="niLocus"] 
    silocus [label="siLocus"] 
    cilocus [label="ciLocus"] 
    filocus [label="fiLocus"] 
    iilocus [label="iiLocus"] 

    node [color=Blue,fontcolor=Blue,shape=diamond] 
    containgene [label=" Contains gene(s)? "] 
    proteincoding [label="Protein coding?"] 
    multiplegenes [label="Multiple genes?"] 
    geneflank [label="Flanked by genes\non both sides?"] 

    ilocus -> containgene 
    containgene:e -> geneflank [xlabel="No"] 
    geneflank:e -> filocus [xlabel="No"] 
    geneflank:w -> iilocus [xlabel="Yes"] 
    containgene:w -> gilocus [xlabel="Yes"] 
    gilocus -> proteincoding 
    proteincoding:e -> nilocus [xlabel="No"] 
    proteincoding:w -> pilocus [xlabel="Yes"] 
    pilocus -> multiplegenes 
    multiplegenes:e -> silocus [xlabel="No"] 
    multiplegenes:w -> cilocus [xlabel="Yes"] 
} 

che produce

enter image description here

+0

Decisamente utile, ma frustrante per il fatto che non riesco ad ottenere un angolo di 90 °, ad esempio, il bordo "No" tra "Contiene il gene (i)?" e "fiancheggiato da geni su entrambi i lati?". –