Como evito que alguns nós e bordas sejam desenhados?

3

Eu tenho um gráfico muito simples:

digraph G {
  "for" -> "initial assignment"
  "initial assignment" -> "condition"
  "condition" -> "code" [color=red]
  "condition" -> "end" [color=red]
  "code" -> "final assignment" [color=red]
  "final assignment" -> "condition" [color=red]
}

See output

No entanto, os nós devem ser desenhados em uma ordem específica, de cima para baixo. (As setas vermelhas ficariam vermelhas porque desafiariam essa ordem específica).

Uma maneira de fazer isso é:

digraph G {

  {rank = same; "$1"; "for"}
  {rank = same; "$2"; "initial assignment"}
  {rank = same; "$3"; "condition"}
  {rank = same; "$4"; "final assignment"}
  {rank = same; "$5"; "code"}
  {rank = same; "$6"; "end"}

  "$1" -> "$2" -> "$3" -> "$4" -> "$5" -> "$6"    

  "for" -> "initial assignment"
  "initial assignment" -> "condition"
  "condition" -> "code" [color=red]
  "condition" -> "end" [color=red]
  "code" -> "final assignment" [color=red]
  "final assignment" -> "condition" [color=red]

}

See output

No entanto, isso exibe esses nós extras no gráfico, e eu prefiro não ter isso. Como posso definir nós e bordas sem que eles sejam desenhados?

(Eu poderia definir as bordas como brancas, o texto do nó como branco, etc., mas o graphviz ainda alocaria espaço para elas e isso não funcionaria em imagens PNG transparentes. Além disso, as camadas não funcionam todos os formatos de saída como .png e o espaço necessário para esses nós ainda estão alocados. Não vamos considerar essas soluções.)

    
por badp 24.02.2012 / 16:28

2 respostas

3

Por que não usar os próprios nós para sugerir uma ordem específica?

digraph G
{
  {
    edge[style=invis]

    a[label="for"]
    b[label="initial assignment"]
    c[label="condition"]
    d[label="final assignment"]
    e[label="code"]
    f[label="end"]

    a -> b -> c -> d -> e -> f
  }

  a -> b -> c
  c -> e [color=red]
  c -> f [color=red]
  e -> d -> c [color=red]
}
    
por 26.02.2012 / 13:10
1

Stephen North , autor de Graphviz, sugere usando [style=invis] :

digraph G {

  {
    node [style=invis]
    edge [style=invis]
    "$1" -> "$2" -> "$3" -> "$4" -> "$5" -> "$6"    
  }

  {rank = same; "$1"; "for"}
  {rank = same; "$2"; "initial assignment"}
................................................................................

output

Isso não resolve totalmente o problema, pois o espaço ainda é alocado para esses bits e peças, mas tenho que adivinhar que ele é o melhor possível.

    
por 26.02.2012 / 11:22

Tags