使用 foreach 循环生成 const plot mark mid 的坐标集

使用 foreach 循环生成 const plot mark mid 的坐标集

参照 PGFPLOTS 手册 1.18.1 版第 79 页,我发现绘制以下图形需要一组坐标:

输出1

\documentclass[tikz]{standalone}

\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot+ [
const plot mark mid,
] coordinates {
(0,0.1) (0.1,0.15) (0.2,0.5) (0.3,0.62)
(0.4,0.56) (0.5,0.58) (0.6,0.65) (0.7,0.6)
(0.8,0.58) (0.9,0.55) (1,0.52)
};
\end{axis}
\end{tikzpicture}
\end{document}

现在,手动设置这些坐标非常繁琐,尤其是当您有 10 个以上的坐标时。所以我想使用foreach循环分别定义 x 和 y 坐标。

问题是,当我尝试在coordinatesset 中使用 forloop 时,编译似乎需要很长时间。

\documentclass[tikz]{standalone}

\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot+ [
const plot mark mid,
] coordinates {
\foreach \i in {1,2,3} (\i,\i+2)
};
\end{axis}
\end{tikzpicture}
\end{document}

另一方面,如果我forloop在之外做addplot,就不会得到预期的结果:

\documentclass[tikz]{standalone}

\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}

\foreach \i in {1,2,3} {
\addplot+ [
const plot mark mid,
] coordinates {
(\i,\i+2)
};}
\end{axis}
\end{tikzpicture}
\end{document}

答案1

在这里,我\expanded\globally 将\foreach结果收集到一个标记列表中\mycoords。然后我在中使用它\addplot

\documentclass[tikz,margin=1mm]{standalone}
\usepackage{pgfplots}
\newtoks\mycoords
\begin{document}
\mycoords{}
\foreach \i in {1,2,3} {\global\mycoords\expandafter{%
  \expanded{\the\mycoords(\i,\i+2)}} }
\begin{tikzpicture}
\begin{axis}
\addplot+ [
const plot mark mid,
] coordinates{\the\mycoords};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容