BEARBEITEN

BEARBEITEN

Ich versuche, Text über den Zeilen hinzuzufügen, die von einem Zufallsknoten in einem Tikzpicture-Entscheidungsbaum kommen. Es scheint einfach zu sein, Text am Ende einer Zeile oder über den Zeilen des übergeordneten Knotens hinzuzufügen, aber ich kann nicht herausfinden, wie ich die Zeilen beschriften kann, die am weitesten rechts liegen. Hier ist, was ich bisher habe:

\documentclass{article}
\usepackage{tikz}
\tikzstyle{decision} = [rectangle, minimum height=18pt, minimum width=18pt, draw=blue, fill=none, thick, inner sep=0pt]
\tikzstyle{chance} = [circle, minimum width=18pt, draw=blue, fill=none, thick, inner sep=0pt]
\tikzstyle{line} = [draw=none]

\tikzset{
grow=right,
sloped,
join=miter,
level 1/.style={sibling distance=5cm,level distance=5.2cm},
level 2/.style={sibling distance=4cm, level distance=6.7cm},
level 3/.style={sibling distance=3cm, level distance=6.7cm},
edge from parent/.style={thick, draw=blue},
edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)},
every node/.style={text ragged, inner sep=1mm}
}

\begin{tikzpicture}[]
\small
\node[decision]{}
 child{node[chance]{}
      child{node[below]{-2900}}
      child{node[line]{-900}}
      edge from parent
            node[above]{Plant B}
    }
    child{node[chance]{}
      child{node[line]{-2820}}
      child{node[line]{-820}}
      edge from parent
            node[above]{Plant A}
        };
\end{tikzpicture}
\end{document}

So sieht es aus

Antwort1

Sie können edge from parentIhren untergeordneten Knoten einfach weitere Anweisungen hinzufügen:

\documentclass{article}
\usepackage{tikz}

\tikzstyle{decision} = [rectangle, minimum height=18pt, minimum width=18pt, draw=blue, fill=none, thick, inner sep=0pt]
\tikzstyle{chance} = [circle, minimum width=18pt, draw=blue, fill=none, thick, inner sep=0pt]
\tikzstyle{line} = [draw=none]

\tikzset{
grow=right,
sloped,
join=miter,
level 1/.style={sibling distance=5cm,level distance=5.2cm},
level 2/.style={sibling distance=4cm, level distance=6.7cm},
level 3/.style={sibling distance=3cm, level distance=6.7cm},
edge from parent/.style={thick, draw=blue},
edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)},
every node/.style={text ragged, inner sep=1mm}
}
\begin{document}
\begin{tikzpicture}[]
\small
\node[decision]{}
 child{node[chance]{}
      child{node[below]{-2900}}
      child{node[line]{-900}}
      edge from parent
            node[above]{Plant B}
    }
    child{node[chance]{} 
      child{node[line] {-2820}
      edge from parent 
        node[above] {Foo}}
      child{node[line]{-820}
      edge from parent 
        node[above] {Bar}}
      edge from parent
            node[above]{Plant A}
        };
\end{tikzpicture}
\end{document}

Ausgabe des Codes

Abgesehen davon ist diese Art von Baum mit dem forestPaket viel einfacher zu erstellen. Während ich diese Antwort schreibe, bin ich sichercfrerfindet eine Antwort und zeigt, wie.

Antwort2

Ich konnte Ihren Code nicht verstehen, also habe ich den Baum in neu gezeichnet forest. Beachten Sie, wie viel kompakter der Baum mit diesem Paket angegeben werden kann. (Es ist kein Geheimnis, dass ich ihn mit forest... zeichnen werde, wenn es ein Baum ist.)

\documentclass[tikz,border=5pt,multi]{standalone}
\usepackage{forest}
\standaloneenv{forest,tikzpicture}
\begin{document}

  \tikzset{
    decision/.style={rectangle, minimum height=18pt, minimum width=18pt,     draw=blue, fill=none, thick, inner sep=0pt},
    chance/.style={circle, minimum width=18pt, draw=blue, fill=none, thick, inner sep=0pt},
    line/.style={draw=none},
  }

  \begin{forest}
    my label/.style={
      edge label={node[auto,sloped,midway,anchor=south]{#1}}
    },
    for tree={
      grow=0,
      parent anchor=east,
      child anchor=west,
      anchor=west,
      text ragged,
      inner sep=1mm,
      edge={thick, draw=blue},
      if level=1{
        for parent={
          l sep=52mm
        },
        s sep=50mm,
        l sep=67mm
      }{
        if level=2{
          s sep=40mm
        }{
          if level=3{
            s sep=30mm
          }{}
        }
      },
    }
    [, decision
      [, chance, my label=Some Label
        [-2900, my label=Fails
        ]
        [-900, my label=Plant B
        ]
      ]
      [, chance
        [-2820, my label=Some Other Thing
        ]
        [-820, my label=Plant A
        ]
      ]
    ]
  \end{forest}

\end{document}

neu gezeichneter Baum

BEARBEITEN

Falls es von Interesse ist, hier eine Variante:

eine andere Form

\documentclass[tikz,border=5pt,multi]{standalone}
\usepackage{forest}
\standaloneenv{forest,tikzpicture}
\begin{document}
  \tikzset{
    decision/.style={rectangle, minimum height=10pt, minimum width=10pt, draw=blue, fill=none, thick, inner sep=0pt},
    chance/.style={circle, minimum width=10pt, draw=blue, fill=none, thick, inner sep=0pt},
  }
  \begin{forest}
    my label/.style={
      edge label={node[auto,sloped,pos=.75,anchor=south]{#1}}
    },
    for tree={
      grow=0,
      child anchor=west,
      anchor=west,
      text ragged,
      inner sep=1mm,
      edge={thick, draw=blue},
      l sep+=30mm,
      s sep+=5mm,
      if n children=0{
        before typesetting nodes={
          label/.wrap pgfmath arg={right:#1}{content()},
          content={},
          chance,
        },
      }{},
      edge path={
        \noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) |- (.child anchor)\forestoption{edge label};
      }
    }
    [, decision
      [, chance, my label=Plant B
        [-2900, my label=Fails
        ]
        [-900, my label=Succeeds
        ]
      ]
      [, chance, my label=Plant A
        [-2820, my label=Something
        ]
        [-820, my label=Other Thing
        ]
      ]
    ]
  \end{forest}
\end{document}

verwandte Informationen