使用 \foreach 和基于计数器的附加宏将数字作为标记

使用 \foreach 和基于计数器的附加宏将数字作为标记

首要问题

我想用命令绘制多条曲线,\foreach并将它们的数字作为标记。这是我想到的代码:

\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}
\begin{tikzpicture}
  \pgfplotstableread{
1 4   0.2  0.1
2 4.2 0.1  0.5
3 3.1 0.3  0.4
4 2.5 0.25 0.35
}\table

\begin{axis}
  \foreach \i in {1,2,3}
\addplot+[text mark={\i}, mark=text] table[x index=0, y index=\i]{\table};
\end{axis}
\end{tikzpicture}
\end{document}

其结果如下: 在此处输入图片描述

我的问题是由于某种原因,text mark={\i}被坚持了 1

一种解决方案是使用\pgfplotsinvokeforeach命令(参见我的回答)。

第二期

但是现在如果我需要使用例如从计数器计算出的其他索引

\pgfmathsetmacro{\j}{\i+1}% with the \foreach command

我会写

\pgfmathsetmacro{\j}{##1+1}% with the \pgfplotsinvokeforeach command

但最后一个不起作用。我认为问题在于#1被解释为 应该代表 的参数\pgfmathsetmacro。我尝试将哈希值加倍,但未能解决第二个问题。

答案1

对于更新的问题,您可以使用 PGF 的数学引擎。

\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}
\begin{tikzpicture}
  \pgfplotstableread{
1 4   0.2  0.1
2 4.2 0.1  0.5
3 3.1 0.3  0.4
4 2.5 0.25 0.35
}\table

\begin{axis}
\pgfplotsinvokeforeach{1,2,3}{%
\addplot+[text mark={\pgfmathparse{int(#1+1)}\pgfmathresult}, mark=text] table[x index=0, y index=#1]{\table};};
\end{axis}
\end{tikzpicture}
\end{document}

答案2

这个问题可以通过使用\pgfplotsforeach而不是\foreach

\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}
\begin{tikzpicture}
  \pgfplotstableread{
1 4   0.2  0.1
2 4.2 0.1  0.5
3 3.1 0.3  0.4
4 2.5 0.25 0.35
}\table

\begin{axis}
  \pgfplotsinvokeforeach{1,2,3}{%
\addplot+[text mark={#1}, mark=text] table[x index=0, y index=#1]{\table};};
\end{axis}
\end{tikzpicture}
\end{document}

感谢这个问题我找到了它pgfplots:foreach 中的 setlength

相关内容