Agregar títulos a dos gráficos uno al lado del otro

Agregar títulos a dos gráficos uno al lado del otro

¿Cómo agrego un título debajo de cada gráfico y al mismo tiempo los mantengo uno al lado del otro?

\documentclass{article}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{positioning}
\tikzset{main node/.style={circle,fill=black,draw,minimum size=.2cm,inner sep=0pt},}
    \begin{center}
        \begin{tikzpicture}
            \node[main node, label=above:{$a$},] (1) {};
            \node[main node, label=right:{$b$}] (2) [below right = 1cm and 1cm of 1] {};
            \node[main node, label=left:{$c$}] (3) [below left = 1cm and 1cm of 1] {};

            \path[draw, thick]
            (1) edge node {} (2)
            (2) edge node {} (3)
            (1) edge node {} (3);
        \end{tikzpicture} \hspace{2cm}
        \begin{tikzpicture}
            \node[main node, label=left:{$a$},] (1) {};
            \node[main node, label=left:{$b$}] (2) [below = 1cm of 1] {};
            \node[main node, label=right:{$c$}] (3) [right = 1cm of 1] {};
            \node[main node, label=right:{$d$}] (4) [below = 1 cm of 3] {};

            \path[draw, thick]
            (1) edge node {} (2)
            (2) edge node {} (4)
            (3) edge node {} (4)
            (1) edge node {} (3);
        \end{tikzpicture}
    \end{center}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta1

Hay muchas maneras de lograrlo. Para no tener subtítulos, puede usar la respuesta de M S, pero sin usar un figureentorno, usando minipageen lugar de subfigurey simplemente escribiendo el texto directamente después \end{tikzpicture}, no \caption. Sin embargo, agregue una línea vacía (salto de párrafo) antes del texto.

Aquí muestro un enfoque completamente diferente, con un solo diagrama tikzpicturey el segundo diagrama movido hacia la derecha con \begin{scope}[xshift=5cm, local bounding box=b]. Crea local bounding boxun nodo que se ajusta alrededor del contenido de scope, que uso para colocar a \nodecon el texto.

Otro detalle: en general no utilizar \usetikzlibrary{..}después \begin{document}. No parece causar ningún problema aquí, pero he visto casos en los que no funciona, por lo que es mejor cargar bibliotecas en el preámbulo.

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\tikzset{main node/.style={circle,fill=black,draw,minimum size=.2cm,inner sep=0pt},}
    \begin{center}
        \begin{tikzpicture}[
            captiontext/.style={below=3mm, text width=5cm}
            ]
            \node[main node, label=above:{$a$}] (1) {};
            \node[main node, label=right:{$b$}, below right = 1cm and 1cm of 1] (2)  {};
            \node[main node, label=left:{$c$}, below left = 1cm and 1cm of 1] (3) {};

            \draw [thick] (1) -- (2) -- (3) -- (1);
            
            \node [captiontext] at (current bounding box.south) {Text text and more text ad infinitum and so on.};


        \begin{scope}[xshift=5cm, local bounding box=b]
            \node[main node, label=left:{$a$},] (1) {};
            \node[main node, label=left:{$b$},below = 1cm of 1] (2)  {};
            \node[main node, label=right:{$c$}, right = 1cm of 1] (3)  {};
            \node[main node, label=right:{$d$}, below = 1 cm of 3] (4)  {};

            \draw [thick] (1) -- (2) -- (4) -- (3) -- (1);
            \end{scope}
            
            \node [captiontext] at (b.south) {More text text and more text ad infinitum and so on going on for a bit.};
        \end{tikzpicture}
    \end{center}
\end{document}

Respuesta2

Puede utilizar dos minipáginas una al lado de la otra. El problema a resolver es hacer que los títulos aparezcan al mismo nivel incluso si las imágenes y los títulos tienen diferentes tamaños verticales.

Mi solución es incrustar las imágenes en minipáginas anidadas con alineación inferior. En cambio, las minipáginas exteriores tienen alineación superior, lo que en realidad significa que sus puntos de referencia serán los del cuadro superior y, por lo tanto, los de la parte inferior de la imagen. Esto colocará los títulos en la misma posición vertical en la página.

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

\tikzset{
  main node/.style={
    circle,
    fill=black,
    draw,
    minimum size=.2cm,
    inner sep=0pt
  },
}

\begin{document}

\begin{figure}

\begin{minipage}[t]{0.45\textwidth}
% left column
  \begin{minipage}[b]{\textwidth}
  \centering
  \begin{tikzpicture}
    \node[main node, label=above:{$a$},] (1) {};
    \node[main node, label=right:{$b$}] (2) [below right = 1cm and 1cm of 1] {};
    \node[main node, label=left:{$c$}] (3) [below left = 1cm and 1cm of 1] {};

    \path[draw, thick]
      (1) edge node {} (2)
      (2) edge node {} (3)
      (1) edge node {} (3);
    \end{tikzpicture}
  \end{minipage}

  \caption{This is the figure on the left, with a not so lengthy caption}
\end{minipage}\hfill % <--- don't forget
\begin{minipage}[t]{0.45\textwidth}
% right column
  \begin{minipage}[b]{\textwidth}
  \centering
  \begin{tikzpicture}
    \node[main node, label=left:{$a$},] (1) {};
    \node[main node, label=left:{$b$}] (2) [below = 1cm of 1] {};
    \node[main node, label=right:{$c$}] (3) [right = 1cm of 1] {};
    \node[main node, label=right:{$d$}] (4) [below = 1 cm of 3] {};

    \path[draw, thick]
      (1) edge node {} (2)
      (2) edge node {} (4)
      (3) edge node {} (4)
      (1) edge node {} (3);
  \end{tikzpicture}
  \end{minipage}

  \caption{This is the figure on the right, with a long caption,
    that should form at least three lines; we add text so that
    it's long enough}
\end{minipage}

\end{figure}

\end{document}

ingrese la descripción de la imagen aquí

Respuesta3

Espero que el código mencionado a continuación sirva para su propósito. Básicamente es una sola figura con dos subtítulos. Si necesita dos figuras diferentes con subtítulos, hágamelo saber.

Basado en tu comentario reciente. Puedes comentar la parte del título de la figura principal.

\documentclass{article}
\usepackage{tikz,subcaption}
\begin{document}
\usetikzlibrary{positioning}
\tikzset{main node/.style={circle,fill=black,draw,minimum size=.2cm,inner sep=0pt},}
\begin{figure}
\centering
\begin{subfigure}[b]{0.4\linewidth}
\centering
\begin{tikzpicture}
        \node[main node, label=above:{$a$},] (1) {};
        \node[main node, label=right:{$b$}] (2) [below right = 1cm and 1cm of 1] {};
        \node[main node, label=left:{$c$}] (3) [below left = 1cm and 1cm of 1] {};
        \path[draw, thick]
        (1) edge node {} (2)
        (2) edge node {} (3)
        (1) edge node {} (3);
    \end{tikzpicture} 
    \caption{caption1} \label{fig:M1} 
    \end{subfigure}
    \begin{subfigure}[b]{0.4\linewidth}
        \centering
   \begin{tikzpicture}
        \node[main node, label=left:{$a$},] (1) {};
        \node[main node, label=left:{$b$}] (2) [below = 1cm of 1] {};
        \node[main node, label=right:{$c$}] (3) [right = 1cm of 1] {};
        \node[main node, label=right:{$d$}] (4) [below = 1 cm of 3] {};
        \path[draw, thick]
        (1) edge node {} (2)
        (2) edge node {} (4)
        (3) edge node {} (4)
        (1) edge node {} (3);
    \end{tikzpicture}  
\caption{caption2} \label{fig:M2}  
\end{subfigure}
\caption{main caption}  
\end{figure}   
\end{document}

La salida:

ingrese la descripción de la imagen aquí

información relacionada