Estou tentando fazer uma linha do tempo em um arquivo tikzpicture
. No entanto, os ticks da minha linha do tempo estão deslocados para a esquerda. Alguém pode me ajudar a consertar isso?
\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}
Responder1
Em vez de alterações no vetor unitário, você pode usar escalas que, sem transform shape
opção, não afetam os nós. Você também pode encurtar o código enquanto estiver fazendo isso ...
\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}
Responder2
Você deve ser consistente ao usar cm
unidades ou nenhuma unidade. Especifique cada nó como (1 cm,0)
, etc. (o que resulta em rótulos sobrepostos) ou (como sugere Jubobs) remova as cm
unidades no loop foreach. Isso produz:
\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}
em que tudo se alinha corretamente. O problema é que, como você especificou x=2cm
nas opções de ambiente, as coordenadas "básicas" (sem unidades) são múltiplos de x
(2cm), ao passo que se você especificar unidades, obterá o que pediu. (Essa incompatibilidade não aparece por padrão, pois inicialmente o vetor x é 1cm.)
Observe que existem dois sistemas de coordenadas diferentes no TikZ especificados por (x,y)
pares. OxyzO sistema é usado quando não há dimensões (unidades de comprimento), como em (2,3)
. Como você viu, estes são fatores que multiplicam os vetores x
e y
, cujos valores podem ser especificados. OtelaO sistema é usado quando as dimensões são fornecidas, como em (2 cm, 7 pt)
. Quando você mistura sistemas (como você fez), estas são as regras (do manual TikZ):
Nota: É possível usar coordenadas como
(1,2cm)
, que não são nemtelacoordenadas nemxyzcoordenadas. A regra é a seguinte: Se uma coordenada tem a forma implícita(⟨x⟩,⟨y⟩)
, então⟨x⟩
e⟨y⟩
são verificados, independentemente, se têm dimensão ou se são adimensionais. Se ambos tiverem uma dimensão, otelasistema de coordenadas é usado. Se ambos não tiverem dimensão, o xyzsistema de coordenadas é usado. Se⟨x⟩
tem uma dimensão e⟨y⟩
não tem, então a soma de duas coordenadas(⟨x⟩,0pt)
e(0,⟨y⟩)
é usada. Se⟨y⟩
tem uma dimensão e⟨x⟩
não tem, então a soma de duas coordenadas(⟨x⟩,0)
e(0pt,⟨y⟩)
é usada.Observe também: uma expressão como
(2+3cm,0)
não significa o mesmo que(2cm+3cm,0)
. Em vez disso, se usar⟨x⟩
internamente⟨y⟩
uma mistura de dimensões e valores adimensionais, todos os valores adimensionais serão "atualizados" para dimensões, interpretando-os comopt
. Então,2+3cm
é a mesma dimensão que2pt+3cm
.