我正在尝试构建一个简单的一维随机游走。我使用 \foreach 并希望对 ax (步长) 和 y (ε) 进行增量。
\pgfmathsetseed{1}
\begin{tikzpicture}
\begin{axis}[
xmin=2018, xmax=2040,
ymin=0, ymax=200,
xlabel={$year$}, ylabel={$value$},
axis x line=bottom,
axis y line=center]
\coordinate (start) at (axis cs:2018,100);
\foreach \year in {2018,...,2040} {
\coordinate (next) at ($ (start) + (1, rand*5) $);
\draw[red] (start) -- (next);
\coordinate (start) at (next);
}
\end{axis}
\end{tikzpicture}
我收到错误“尺寸太大”。如果我为线设置尺寸(例如厘米)
\coordinate (next) at ($ (start) + (0.5cm, rand*0.5cm) $);
然后代码就可以正常工作,但步长与轴不再相关。有没有办法让 xshift 在轴上等于一步,而无需硬编码轴宽度(以厘米为单位)并指定相应的 xshift(以厘米为单位)?
答案1
axis cs
仅允许绝对位置。如果您需要相对位置,则必须使用axis direction cs
。有关更多信息,请参阅 pgfplots 文档中的“4.17.1 访问图形元素中的轴坐标”部分。
例子:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\pgfmathsetseed{1}
\begin{tikzpicture}
\begin{axis}[
xmin=2018, xmax=2040,
ymin=0, ymax=200,
xlabel={year}, ylabel={value},
axis x line=bottom,
axis y line=center
]
%
\coordinate (start) at (2018,100);
\foreach \year in {2018,...,2040}
\draw[red](start) -- + (axis direction cs:1, rand*5)coordinate(start);
%
\coordinate (start) at (2018,100);
\draw[blue](start) foreach \year in {2018,...,2040}
{-- ++ (axis direction cs:1, rand*5)coordinate(start)};
%
\end{axis}
\end{tikzpicture}
\end{document}
结果: