Crear un gráfico dirigido con alguna estructura cosmética.

Crear un gráfico dirigido con alguna estructura cosmética.

Utilizando Tikz, me gustaría crear un gráfico como el siguiente:

grafico

Entonces me gustaría tener un gráfico dirigido clásico, donde haya algo de texto en cada nodo. Además, hay un único marco asociado a cada nodo, y el marco está lleno de un montón de viñetas.

Además, tres propiedades opcionales pero deseadas:

  • Todos los nodos son del mismo tamaño. También sería fantástico si pudieran contener el texto dentro de ellos correctamente, de modo que el tamaño de los nodos se ajustara correctamente. el nodo con el texto más grande.

  • Pudiendo enmarcar el nodo en la posición deseada (ver diferencia entre A, C versus B en el gráfico). Un conjunto de opciones como arriba, abajo, izquierda, derecha y combinaciones por pares podrían ser suficientes en lugar de la ubicación por coordenadas.

  • El tamaño del marco se está ajustando wrt. número de viñetas (consulte los diferentes tamaños de fotograma en el gráfico).

Con mi conocimiento actual, solo puedo crear el gráfico dirigido genérico que consta de nodos y bordes. Intentaré descubrir cómo lograr todo esto (suponiendo que haya una manera) leyendo la documentación; sin embargo, agradecería mucho que alguien pudiera echarme una mano.

Respuesta1

Un par de estilos y listo:

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

ingrese la descripción de la imagen aquí

La posición de los marcos con respecto a los círculos se puede controlar usando la at (<name>.<angle>)sintaxis y los anclajes apropiados para los marcos.

Utilicé el enumitempaquete para tener una versión personalizada de itemize sin espacio vertical adicional ni margen izquierdo.

información relacionada