Estoy intentando hacer una línea de tiempo en un archivo tikzpicture
. Sin embargo, los ticks de mi línea de tiempo están desplazados hacia la izquierda. ¿Alguien puede ayudarme a solucionar este problema?
\begin{tikzpicture}[x=2cm,y=2ex]
%draw horizontal line
\draw (1,0) -- (6,0);
%draw vertical line
\foreach \x in {1,2,3,4,5,6}
\draw (\x cm, 3pt) -- (\x cm,-3pt);
%draw nodes
\draw (1,0) node[below=3pt] {$ 1 $} node[above=14pt] {RD};
\draw (2,0) node[below=3pt] {$ 2 $} node[above=3pt] {Defendant enters market};
\draw (3,0) node[below=3pt] {$ 3 $} node[above=14pt] {Lawsuit};
\draw (4,0) node[below=3pt] {$ 4 $} node[above=3pt] {PI Decision};
\draw (5,0) node[below=3pt] {$ 5 $} node[above=14pt] {Final Decision};
\draw (6,0) node[below=3pt] {$ 6 $} node[above=3pt] {Final Pay-offs};
\end{tikzpicture}
Respuesta1
En lugar de cambios de vectores unitarios, puede utilizar escalas que, sin transform shape
opción, no afectan a los nodos. También puedes acortar el código mientras lo haces...
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[xscale=2]
\def\mylist{{"RD","Defendant enters market","Lawsuit",
"PI Decision","Final Decision","Final Pay-offs"}}
\draw (1,0) -- (6,0);
\foreach \x[count=\xi from 0] in {1,...,6}{
\draw (\x cm, 3pt) -- (\x cm,-3pt) node[below=3pt] at (\x,0) {$\x$}
\pgfextra{\pgfmathparse{Mod(\x,2)==0?"3pt":"14pt"}}
node [above=\pgfmathresult] {\pgfmathparse{\mylist[\xi]}\pgfmathresult};
}
\end{tikzpicture}
\end{document}
Respuesta2
Debes ser coherente con el uso cm
de unidades o ninguna unidad. Especifique cada nodo como (1 cm,0)
, etc. (lo que da como resultado etiquetas superpuestas) o (como sugiere Jubobs) elimine las cm
unidades en el bucle foreach. Esto produce:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=2cm,y=2ex]
%draw horizontal line
\draw (1,0) -- (6,0);
%draw vertical line
\foreach \x in {1,2,3,4,5,6}
\draw (\x, 3pt) -- (\x,-3pt);
%draw nodes
\draw (1,0) node[below=3pt] {$ 1 $} node[above=14pt] {RD};
\draw (2,0) node[below=3pt] {$ 2 $} node[above=3pt] {Defendant enters market};
\draw (3,0) node[below=3pt] {$ 3 $} node[above=14pt] {Lawsuit};
\draw (4,0) node[below=3pt] {$ 4 $} node[above=3pt] {PI Decision};
\draw (5,0) node[below=3pt] {$ 5 $} node[above=14pt] {Final Decision};
\draw (6,0) node[below=3pt] {$ 6 $} node[above=3pt] {Final Pay-offs};
\end{tikzpicture}
\end{document}
en el que todo se alinea correctamente. El problema es que, como especificaste x=2cm
en las opciones de entorno, las coordenadas "desnudas" (sin unidades) son múltiplos de x
(2 cm), mientras que si especificas unidades, obtienes lo que pides. (Esta discrepancia no aparece de forma predeterminada, ya que inicialmente el vector x mide 1 cm).
Tenga en cuenta que hay dos sistemas de coordenadas diferentes en TikZ especificados por (x,y)
pares. ElxyzEl sistema se utiliza cuando no hay dimensiones (unidades de longitud), como en (2,3)
. Como has visto, se trata de factores que multiplican los vectores x
y y
, cuyos valores se pueden especificar. EllienzoEl sistema se utiliza cuando se suministran dimensiones, como en (2 cm, 7 pt)
. Cuando mezclas sistemas (como lo hiciste), estas son las reglas (del manual de TikZ):
Nota: Es posible utilizar coordenadas como
(1,2cm)
, que no son nilienzocoordenadas nixyzcoordenadas. La regla es la siguiente: Si una coordenada es de la forma implícita(⟨x⟩,⟨y⟩)
, entonces⟨x⟩
y⟨y⟩
se comprueban, independientemente, si tienen dimensión o si son adimensionales. Si ambos tienen una dimensión, ellienzoSe utiliza el sistema de coordenadas. Si a ambos les falta una dimensión, el xyzSe utiliza el sistema de coordenadas. Si⟨x⟩
tiene una dimensión y⟨y⟩
no la tiene, entonces se utiliza la suma de dos coordenadas(⟨x⟩,0pt)
y .(0,⟨y⟩)
Si⟨y⟩
tiene una dimensión y⟨x⟩
no la tiene, entonces se utiliza la suma de dos coordenadas(⟨x⟩,0)
y .(0pt,⟨y⟩)
Tenga en cuenta además: una expresión como
(2+3cm,0)
no significa lo mismo que(2cm+3cm,0)
. En cambio, si⟨x⟩
o⟨y⟩
utiliza internamente una combinación de dimensiones y valores adimensionales, entonces todos los valores adimensionales se "actualizan" a dimensiones interpretándolos comopt
. Entonces,2+3cm
es la misma dimensión que2pt+3cm
.