
¿Cómo puedo alinear verticalmente los ejes de dos gráficos dibujados en tikz uno al lado del otro? Aquí está mi código:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\resizebox{0.45\linewidth}{8cm}{
\begin{tikzpicture}
\tikzstyle{every node}=[font=\tiny];
%Axes
\draw[-latex] (0, 0) -- (3, 0) ;
\draw[-latex] (0, -1.5) -- (0, 2);
\node[above] at (0, 2) {\( \$ \)};
\node[right] at (3, 0) {\( S_T \)};
%Title
\node[above, font = \small\bfseries] at (current bounding box.north) {Long Call};
\end{tikzpicture}
}
\quad
\resizebox{0.45\linewidth}{8cm}{
\begin{tikzpicture}
\tikzstyle{every node}=[font=\tiny];
%Axes
\draw[-latex] (0, 0) -- (3, 0) ;
\draw[-latex] (0, -1.5) -- (0, 2);
\node[above] at (0, 2) {\( \$ \)};
\node[right] at (3, 0) {\( S_T \)};
%Title
\node[above, font = \small\bfseries] at (current bounding box.north) {Short Call};
\end{tikzpicture}
}
\end{center}
\end{document}
Como puedes ver en la imagen de abajo, los ejes están ligeramente desalineados:
El problema parece provenir del hecho de que la g en 'Long' hace que el título izquierdo sea más alto. Intenté definir las mismas dimensiones de cambio de tamaño para ambas imágenes y valign = t, pero ninguna de ellas funcionó.
Respuesta1
Simplemente coloque el baseline
en la misma coordenada, aquí (0,0)
:
\begin{tikzpicture}[baseline={(0,0)}]
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\resizebox{0.45\linewidth}{8cm}{
\begin{tikzpicture}[baseline={(0,0)}]
\tikzstyle{every node}=[font=\tiny];
%Axes
\draw[-latex] (0, 0) -- (3, 0) ;
\draw[-latex] (0, -1.5) -- (0, 2);
\node[above] at (0, 2) {\( \$ \)};
\node[right] at (3, 0) {\( S_T \)};
%Title
\node[above, font = \small\bfseries] at (current bounding box.north) {Long Call};
\end{tikzpicture}
}
\quad
\resizebox{0.45\linewidth}{8cm}{
\begin{tikzpicture}[baseline={(0,0)}]
\tikzstyle{every node}=[font=\tiny];
%Axes
\draw[-latex] (0, 0) -- (3, 0) ;
\draw[-latex] (0, -1.5) -- (0, 2);
\node[above] at (0, 2) {\( \$ \)};
\node[right] at (3, 0) {\( S_T \)};
%Title
\node[above, font = \small\bfseries] at (current bounding box.north) {Short Call};
\end{tikzpicture}
}
\end{center}
\end{document}
Respuesta2
- La pequeña falta de alineación vertical de las imágenes se debe a diferentes tamaños verticales de los nodos de título: el primero contiene la letra g con descendente, el segundo no tiene dicha letra. Si especifica la profundidad del texto, por ejemplo con
text depth=0.5ex
, ambos nodos de título tendrán la misma altura y, en consecuencia, ambas imágenes se alinearán verticalmente. - Fuera de tema: el uso de
\resizebox
no es una buena idea. También cambia el tamaño de las fuentes (por lo que perdiste el control sobre ellas).
\documentclass{article}
\usepackage{tikz}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\begin{document}
\begin{center}
\tikzset{
every node/.style = {text depth=0.5ex, font=\small} % <---
}
\begin{tikzpicture}
%Axes
\draw[-latex] (0, 0-0) -- (0.4\linewidth, 0) node[right] {\( S_T \)};
\draw[-latex] (0,-1.5) -- (0, 3) node[above] {\( \$ \)};
%Title
\node[above, font = \bfseries] at (current bounding box.north) {Long Call};
\end{tikzpicture}
\hfill
\begin{tikzpicture}
%Axes
\draw[-latex] (0, 0-0) -- (0.4\linewidth, 0) node[right] {\( S_T \)};
\draw[-latex] (0,-1.5) -- (0, 3) node[above] {\( \$ \)};
%Title
\node[above, font = \bfseries] at (current bounding box.north) {Short Call};
\end{tikzpicture}
\end{center}
\end{document}
(las líneas rojas muestran los bordes del texto)
Respuesta3
Una solución ligeramente más genérica para cuando diferentes alturas de texto en títulos o leyendas arruinan la alineación vertical es hacer que Latex pretenda que también hay una letra más alta (más baja) en el otro texto.
Si sus dos textos son Long Call
y Short Call
, simplemente cambie este último a Short Call\vphantom{g}
. De esta manera, Latex lo tratará como si también ocupara este espacio vertical (pero no espacio horizontal adicional).
Tenga en cuenta que esto es un truco y casi siempre hay una solución mejor, como cambiar el origen en este caso, pero es un truco útil si desea corregir rápidamente la alineación. Sólo necesitas saber/adivina qué letras lo están causando, o usar un poco exagerado Short Call\vphantom{Long Call}
, solo para estar seguro.