Erstellen eines gerichteten Graphen mit einer gewissen kosmetischen Struktur

Erstellen eines gerichteten Graphen mit einer gewissen kosmetischen Struktur

Mithilfe von Tikz möchte ich ein Diagramm wie das folgende erstellen:

Graph

Ich hätte also gerne einen klassischen gerichteten Graphen, bei dem in jedem Knoten ein Text steht. Außerdem ist jedem Knoten ein einzelner Rahmen zugeordnet, der mit einer Reihe von Aufzählungspunkten gefüllt ist.

Zusätzlich drei optionale, aber erwünschte Eigenschaften:

  • Alle Knoten haben die gleiche Größe. Es wäre auch toll, wenn sie den Text richtig in sich aufnehmen könnten, sodass die Knotengröße an den Knoten mit dem größten Text angepasst würde.

  • Möglichkeit, den Rahmen an der gewünschten Knotenposition zu platzieren (siehe Unterschied zwischen A, C und B im Diagramm). Anstelle einer Platzierung nach Koordinaten könnten Optionen wie oben, unten, links, rechts und die paarweisen Kombinationen ausreichen.

  • Rahmengröße wird hinsichtlich der Anzahl der Aufzählungspunkte angepasst (siehe unterschiedliche Rahmengrößen im Diagramm).

Mit meinem derzeitigen Wissen kann ich nur den generischen gerichteten Graphen erstellen, der aus Knoten und Kanten besteht. Ich werde versuchen, durch Lesen der Dokumentation herauszufinden, wie ich all dies erreichen kann (vorausgesetzt, es gibt einen Weg), wäre jedoch sehr dankbar, wenn mir jemand helfen könnte.

Antwort1

Ein paar Stile und schon kann es losgehen:

\documentclass{article}
\usepackage{enumitem}
\usepackage{tikz}
\usetikzlibrary{positioning}

\newlist{tikzitem}{itemize}{1}
\setlist[tikzitem,1]{label=$\bullet$,nolistsep,leftmargin=*}

\begin{document}

\begin{tikzpicture}[
mynode/.style={
  circle,
  draw,
  fill=yellow,
  minimum size=1cm,
  align=center
  },
frame/.style={
  draw=cyan,
  line width=3pt,
  text width=2cm,
  rounded corners
  },
ar/.style={
  ->,
  >=latex
  }    
]
\node[mynode] (a) {Some text};
\node[mynode,below right=2cm and 6cm of a]  (c) {Some text};
\node[mynode,below left=2cm and 6cm of c]  (b) {Some text};

\node[frame,anchor=north west] at (a.-90) 
  {%
  \begin{tikzitem} 
  \item First.
  \item Second.
  \item Third.
  \end{tikzitem}%
  };
\node[frame,anchor=south west] at (b.90) 
  {%
  \begin{tikzitem} 
  \item First.
  \item Second.
  \item Third.
  \end{tikzitem}%
  };
\node[frame,anchor=west] at (c.0) 
  {%
  \begin{tikzitem} 
  \item First.
  \item Second.
  \item Third.
  \item Fourth.
  \item Fifth.
  \end{tikzitem}%
  };

\draw[ar] (a) to[bend left] (c);  
\draw[ar] (b) to[bend right] (c);  
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

Die Position der Rahmen in Bezug auf die Kreise kann über die at (<name>.<angle>)Syntax und die entsprechenden Anker für die Rahmen gesteuert werden.

Ich habe das enumitemPaket verwendet, um eine angepasste Version von Itemize ohne zusätzlichen vertikalen Abstand und ohne linken Rand zu erhalten.

verwandte Informationen