Tikz повернул мои дочерние узлы

Tikz повернул мои дочерние узлы

Я рисую дерево в tikz, однако, похоже, что дочерние узлы повернуты, так что линия, входящая в них, смещена и проходит сквозь. Посмотрите, например, на эту картинку. Особенно обратите внимание на то, как линии смещены по центру и как они проходят через синий шар..

Я нарисовал картинку, используя:

\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]

определить окружающую среду и:

\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) {}
}
;

}

нарисовать настоящую фигуру. Есть ли у кого-нибудь идеи, почему она выглядит так уродливо?

решение1

Основная проблема, насколько я могу судить, заключается в том, что вы смешиваете древовидную структуру с ручным размещением всех узлов. Так что, если бы мне пришлось рискнуть предположить, я бы предположил, что втвойкод --- код, который воспроизводит проблему, в отличие от кода, которым вы поделились, который не воспроизводит проблему --- вы сообщаете TiкZ, что дерево растет в одном направлении, в то время как вручную принудительно размещаются узлы, как будто оно растет в другом.

Нет смысла использовать дерево, а затем устанавливать и sibling distanceи level distanceна ноль. По крайней мере, у меня может просто не хватать воображения, но я не могу придумать веской причины, по которой вам бы хотелось это сделать.

Вот версия вашего дерева, обновленная с целью удаления устаревших элементов \tikzstyleи измененная так, чтобы она действительно была деревом.

\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]  {}
  }
  ;
}

дерево

Или, с grow=up:

вверх по дереву

Если я постараюсь, то смогу получить приблизительно такой же результат, как у вас.

уродливое дерево

Но я добился этого и обнулением level, sibling distanceи настройкой 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) {}
  }
  ;
}

что вряд ли является очевидным решением.

Для полноты картины вот forest:

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

который создает дерево из гораздо более краткой спецификации.

лес

Полный код:

\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}

Связанный контент