有人可以帮我使用 tikz 树绘制这个方案吗?

有人可以帮我使用 tikz 树绘制这个方案吗?

我想画这个方案

在此处输入图片描述

所以我写了这个代码

\begin{tikzpicture}[
every node/.style = {shape=rectangle, rounded corners,
                     draw, font=\small, align=center, fill=white},              
   level 1/.style = {sibling distance = 10em},% <-- new
   level 2/.style = {sibling distance = 9em},% <-- new
   level 3/.style = {sibling distance = 8em},% <-- new
   level 4/.style = {sibling distance = 8em},% <-- new
]
\node {Estabilidade de Sistemas\\Elétricos de Potência}
    [edge from parent fork down]
    child {node {Estabilidade do\\Ângulo do Rotor}
        child {node {Estabilidade Angular\\a Pequenos Distúrbios}}
        child {node {Estabilidade\\Transitória}
            child {node {Curto Prazo}}}}
    child {node{Estabilidade de\\Frequência}
        child{node{Curto Prazo}}
        child{node{Longo Prazo}}}
    child {node{Estabilidade\\de Tensão}
           child {node{Estabilidade de\\Tensão a Grandes\\Perturbações}
                child {node{Curto Prazo}}}
           child {node {Estabilidade de\\Tensão a Pequenas\\Perturbações}
                child {node{Longo Prazo}}}};
\end{tikzpicture}

但我明白了

在此处输入图片描述

我不知道如何让两个节点具有相同的子节点并产生正确的垂直间距。

请帮我!

答案1

这不是一个完美的解决方案。用于missing child“使”两个节点具有相同的子节点。

在此处输入图片描述

\documentclass[border=3mm]{standalone}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{trees}

\begin{document}

\begin{tikzpicture}[
every node/.style = {shape=rectangle, rounded corners,
                     draw, font=\small, align=center, fill=white},              
   level 1/.style = {sibling distance = 10em},% <-- new
   level 2/.style = {sibling distance = 9em},% <-- new
   level 3/.style = {sibling distance = 8em},% <-- new
   level 4/.style = {sibling distance = 8em},% <-- new
]
\node {Estabilidade de Sistemas\\Elétricos de Potência}
    [edge from parent fork down]
    child {node {Estabilidade do\\Ângulo do Rotor}
        child {node {Estabilidade Angular\\a Pequenos Distúrbios}
child[missing] child{}}
        child {node {Estabilidade\\Transitória}
            child {node[xshift=-3.6mm] {Curto Prazo}}child[missing]}}
    child {node{Estabilidade de\\Frequência}
child{child{
        child{node{Curto Prazo}}
        child{node{Longo Prazo}}}}}
    child {node{Estabilidade\\de Tensão}
           child {node{Estabilidade de\\Tensão a Grandes\\Perturbações}
                child[missing]  child[missing] child {node{Curto Prazo}}}
           child {node {Estabilidade de\\Tensão a Pequenas\\Perturbações}
                child {node{Longo Prazo}}child[missing] child[missing]
}};
\end{tikzpicture}

\end{document}

答案2

\documentclass[border=12pt]{standalone}

\usepackage[edges]{forest}


\begin{document}


\begin{forest}
  for tree={align=c,draw,rounded corners, tier/.option=level, anchor=base, l sep'+=10pt},
  forked edges,
  before typesetting nodes={
    where content={}{phantom}{}
  },
  before drawing tree={
    where n children=0{
      if={>O{!u.phantom}}{
        tikz+={\draw (!up.parent anchor) -- +(0pt,-\foresteoption{fork sep}) -| (.child anchor) (!un.parent anchor) -- +(0pt,-\foresteoption{fork sep}) -| (.child anchor);}
      }{}
    }{}
  },
  [Estabilidade de Sistemas\\Elétricos de Potência
    [Estabilidade do\\Ângulo do Rotor
      [Estabilidade Angular\\a Pequenos Distúrbios[]]
      [ 
        [Curto Prazo]
      ]
      [Estabilidade\\Transitória[]]
    ]
    [Estabilidade de\\Frequência
    [\strut\\\strut\\\strut, draw=none, child anchor/.option=parent anchor 
        [Curto Prazo]
        [Longo Prazo]
      ]
    ]
    [Estabilidade\\de Tensão
      [Estabilidade de\\Tensão a Grandes\\Perturbações[]]
      [
        [Curto Prazo]
        [Longo Prazo]
      ]
      [Estabilidade de\\Tensão a Pequenas\\Perturbações[]]
    ]
  ]
\end{forest}

\end{document}

输出

相关内容