Tikz girou os nós dos meus filhos

Tikz girou os nós dos meus filhos

Estou desenhando uma árvore no tikz, no entanto, parece que os nós filhos foram girados, de modo que a linha que entra neles é deslocada e passa por eles. Veja, por exemplo, esta imagem. Observe especialmente como as linhas estão descentralizadas e como elas passam pela bola azul..

Eu desenhei a imagem usando:

\includepackage{tikz}
\tikzstyle planar forest=[scale=1, sibling distance=0, level distance=0, semithick]
\tikzstyle planar forest node=[scale=1, shape=circle, semithick, draw]
\tikzstyle b=[style=planar forest node, fill=black]
\tikzstyle bb=[style=planar forest node, fill=blue]

para definir o ambiente e:

\tikz[planar forest] {
\node [b, label=right:] at (0.0, 0.0) {}
child {node [bb, label=right:] at (-0.5, 1.0) {}
}
child {node [b, label=right:] at (0.5, 1.0) {}
}
;

}

para desenhar a figura real. Alguém tem uma idéia de por que parece tão feio?

Responder1

A questão básica, pelo que posso dizer, é que você está misturando uma estrutura em árvore com o posicionamento manual de todos os nós. Então, se eu tivesse que arriscar um palpite, diria que emseucódigo --- o código que reproduz o problema em oposição ao código que você compartilhou, o que não --- você está dizendo a TikZ que a árvore está crescendo em uma direção enquanto força manualmente a localização dos nós como se estivesse crescendo em outra.

Não faz sentido usar uma árvore e depois definir ambos sibling distancee level distancecomo zero. Pelo menos, posso simplesmente não ter imaginação, mas não consigo pensar em um bom motivo para você querer fazer isso.

Aqui está uma versão da sua árvore, atualizada para remover o obsoleto \tikzstylee modificada para realmente ser uma árvore.

\tikzset{
  planar forest node/.style={shape=circle, semithick, draw},
  b/.style={style=planar forest node, fill=black},
  bb/.style={style=planar forest node, fill=blue},
}
\tikz {
  \node [b, label=right:A] {}
  child {node [bb, label=right:B]  {}
  }
  child {node [b, label=right:C]  {}
  }
  ;
}

árvore

Ou com grow=up:

até a árvore

Se eu me esforçar, posso produzir uma aproximação do seu resultado.

árvore feia

Mas consegui isso zerando levele sibling distancedefinindo yscale=-.75:

\tikz [sibling distance=0, level distance=0, yscale=-.75] {
  \node [b] {}
  child {node [bb] at (-.5,1)  {}
  }
  child {node [b] at (.5,1) {}
  }
  ;
}

o que dificilmente é uma coisa óbvia de se fazer.

Para completar, aqui está forest:

\begin{forest}
  [, b
    [, bb
    ]
    [, b
    ]
  ]
\end{forest}

que produz uma árvore a partir de uma especificação muito mais concisa.

floresta

Código completo:

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\begin{document}
\tikzset{
  planar forest node/.style={shape=circle, semithick, draw},
  b/.style={style=planar forest node, fill=black},
  bb/.style={style=planar forest node, fill=blue},
}
\tikz {
  \node [b, label=right:A] {}
  child {node [bb, label=right:B]  {}
  }
  child {node [b, label=right:C]  {}
  }
  ;
}
\tikz [grow=up] {
  \node [b, label=right:A] {}
  child {node [bb, label=right:B]  {}
  }
  child {node [b, label=right:C]  {}
  }
  ;
}
\tikz [sibling distance=0, level distance=0, yscale=-.75] {
  \node [b] {}
  child {node [bb] at (-.5,1)  {}
  }
  child {node [b] at (.5,1) {}
  }
  ;
}
\begin{forest}
  [, b
    [, bb
    ]
    [, b
    ]
  ]
\end{forest}
\end{document}

informação relacionada