Я пытаюсь сделать временную шкалу в tikzpicture
. Однако отметки моей временной шкалы смещены влево. Может кто-нибудь помочь мне это исправить?
\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}
решение1
Вместо изменений единичного вектора вы можете использовать масштабы, которые без transform shape
опции не влияют на узлы. Вы также можете сократить код, пока вы в нем...
\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}
решение2
Вы должны быть последовательны в использовании cm
единиц или их отсутствии. Либо укажите каждый узел как (1 cm,0)
и т. д. (что приведет к перекрывающимся меткам), либо (как предлагает Jubobs) удалите cm
единицы в цикле foreach. Это дает:
\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}
в котором все выстраивается правильно. Проблема в том, что, поскольку вы указали x=2cm
в параметрах среды, «голые» координаты (без единиц) кратны x
(2 см), тогда как если вы укажете единицы, вы получите то, что запрашиваете. (Это несоответствие не отображается по умолчанию, поскольку изначально x-вектор равен 1 см.)
Обратите внимание, что в TikZ есть две разные системы координат, заданные (x,y)
парами.хyzсистема используется, когда нет измерений (единиц длины), как в (2,3)
. Как вы видели, это факторы, которые умножают x
и y
векторы, значения которых могут быть указаны.холстсистема используется, когда указаны размеры, как в (2 cm, 7 pt)
. Когда вы смешиваете системы (как вы это сделали), действуют следующие правила (из руководства TikZ):
Примечание: можно использовать координаты типа
(1,2cm)
, которые не являются нихолсткоординаты нихyzкоординаты. Правило следующее: если координата имеет неявную форму(⟨x⟩,⟨y⟩)
, то⟨x⟩
и⟨y⟩
проверяются независимо, имеют ли они размерность или являются безразмерными. Если обе имеют размерность, тохолстИспользуется система координат. Если обе не имеют размерности, то хyzИспользуется система координат. Если⟨x⟩
имеет размерность и⟨y⟩
не имеет, то используется сумма двух координат(⟨x⟩,0pt)
и . Если имеет размерность и не имеет, то используется сумма двух координат и .(0,⟨y⟩)
⟨y⟩
⟨x⟩
(⟨x⟩,0)
(0pt,⟨y⟩)
Обратите внимание еще раз: выражение типа
(2+3cm,0)
не означает то же самое, что и(2cm+3cm,0)
. Вместо этого, если⟨x⟩
или⟨y⟩
внутренне использует смесь измерений и безразмерных значений, то все безразмерные значения «повышаются» до измерений путем интерпретации их какpt
. Таким образом,2+3cm
является тем же измерением, что и2pt+3cm
.