17

I'm trying to draw a graph and have a separate graph within one of the outer nodes. I seen this question, but I don't understand how the matrix nodes will help me. I would also like to draw edges between the outer nodes to the inner nodes.

Could someone please make a quick example of with 3 nodes, where one of the nodes contains a subgraph with 3 nodes?

27

Here's a little example: two "outer" nodes, each one containing a graph (formed with "inner" nodes) and some edges and arrows connecting outer nodes to outer nodes, and inner nodes from one graph to inner nodes of the other; the remember picture option lets you access inner and outer nodes at any time:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}

\begin{document}

\begin{tikzpicture}[remember picture,
  inner/.style={circle,draw=blue!50,fill=blue!20,thick,inner sep=3pt},
  outer/.style={draw=green,fill=green!20,thick,inner sep=10pt}
  ]
  \node[outer,draw=green] (A) {
    \begin{tikzpicture}
      \node [inner,draw=blue] (ai)  {A1};
      \node [inner,draw=blue,below=of ai] (aii) {A2};
      \node [inner,draw=blue,right=of aii] (aiii) {A3};
      \draw[red,thick] (ai) -- (aii) -- (aiii) -- (ai);
    \end{tikzpicture}
  };
  \node[outer,draw=green,right=of A] (B) {
    \begin{tikzpicture}
      \node [inner,draw=blue] (bi)  {B1};
      \node [inner,draw=blue,below=of bi] (bii) {B2};
      \node [inner,draw=blue,right=of bii] (biii) {B3};
      \node [inner,draw=blue,right=of bi] (biv) {B4};
      \draw[red,thick] (bi) -- (bii) -- (biii) -- (biv) -- (bi) -- (biii);
    \end{tikzpicture}
  };
  \draw[thick,orange,->] (ai) -- (bii);
  \draw[orange,->] (aiii) -- (bi);
  \draw[orange,->] (A.90) -- ($(A.90)+(0,1)$) -| (B);
\end{tikzpicture}

\end{document}

enter image description here

4

I don't know the kind of problems that OP has with TiKZ matrices but Gonzalo's example is the kind of graph where a matrix is really helpful.

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,matrix}

\begin{document}

\begin{tikzpicture}[
  inner/.style={circle,draw=blue!50,fill=blue!20,thick,inner sep=3pt},
  outer/.style={draw=green,fill=green!20,thick,inner sep=10pt, column sep=1cm, row sep=1cm}
  ]
  \matrix (A) [matrix of nodes, outer, nodes={inner}]{
    A1 \\
    A2 & A3\\
  };

  \matrix (B) [matrix of nodes, outer, nodes={inner}, right=of A]{
    B1 & B4\\
    B2 & B3\\
  };

  \draw[red, thick] (A-1-1)--(A-2-1)--(A-2-2)--(A-1-1);
  \draw[red, thick] (B-1-1)--(B-1-2)--(B-2-2)--(B-2-1)--(B-1-1);
  \draw[thick, orange,->] (A-1-1)--(B-2-1);
  \draw[thick, orange,->] (A-2-2)--(B-1-1);
  \draw[thick, orange,->] (A.north)--([yshift=1cm]A.north)-|(B);
\end{tikzpicture}

\end{document}

enter image description here

0

Building on Gonzalo Medina answer I figured out this neat code, that is useful when one wants to duplicate graph components. It also automates indexing to some degree.

\documentclass{standalone}
\usepackage{tikz}

\newcommand{\blocknode}[1]{
    \begin{scope}[every node/.style={thick, circle, draw ,minimum width=5mm}]
        \draw (0,0) -- (0,5) -- (5,5) -- (5,0) -- cycle;
        \node (T#1) at (2.5, 1){T#1};
        \node (L#1) at (  1, 4){L#1};
        \node (R#1) at (  4, 4){R#1};
        \draw (L#1) to (T#1);
        \draw (R#1) to (T#1);
    \end{scope}
}    

\begin{document}

\begin{tikzpicture}[remember picture]
    \node (N1) at (0,0){\tikz{\blocknode{1}}};
    \node (N2) at (9,3){\tikz{\blocknode{2}}};
    \draw[color=red] (L1) -- (T1) --(R1) --(L1);
    \draw[color=blue] (L2) -- (T2) --(R2) --(L2);
    \draw[color=green] (L1) -- (L2) (R1)--(R2) (T1) --(T2);
\end{tikzpicture}

\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.