Criando um gráfico direcionado com alguma estrutura cosmética

Criando um gráfico direcionado com alguma estrutura cosmética

Utilizando o Tikz, gostaria de criar um gráfico como o seguinte:

gráfico

Então, eu gostaria de ter um gráfico direcionado clássico, onde houvesse algum texto em cada nó. Além disso, há um único quadro associado a cada nó, e o quadro é preenchido com vários marcadores.

Além disso, três propriedades opcionais, mas desejadas:

  • Todos os nós são do mesmo tamanho. Também seria ótimo se eles pudessem manter o texto dentro deles corretamente, assim o tamanho dos nós seria ajustado. o nó com o maior texto.

  • Poder colocar o quadro na posição desejada do nó (ver diferença entre A,C versus B no gráfico). Um conjunto de opções como para cima, para baixo, para a esquerda, para a direita e as combinações de pares podem ser suficientes em vez do posicionamento por coordenadas.

  • Tamanho do quadro sendo ajustado em relação ao valor. número de marcadores (veja os vários tamanhos de quadro no gráfico).

Com meu conhecimento atual, só consigo criar o gráfico direcionado genérico que consiste nos nós e nas arestas. Tentarei descobrir como conseguir tudo isso (supondo que haja uma maneira) lendo a documentação, mas agradeceria muito se alguém pudesse ajudar.

Responder1

Alguns estilos e você está pronto para ir:

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

insira a descrição da imagem aqui

A posição dos quadros em relação aos círculos pode ser controlada utilizando a at (<name>.<angle>)sintaxe e as âncoras apropriadas para os quadros.

Usei o enumitempacote para ter uma versão customizada do itemize sem espaçamento vertical extra e sem margem esquerda.

informação relacionada