tikz-picture:数组上的 for 循环

tikz-picture:数组上的 for 循环

我想绘制一个分段常数函数,像那个最小例子一样:

你好,我想绘制一个分段常数函数,像那个最小例子一样:

\documentclass[tikz]{standalone}

\usepackage[utf8]{inputenx}
\usepackage[T1]{fontenc}

\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\usepackage{xcolor}

% read variables from file
\usepackage{readarray}
\usepackage{filecontents}

\begin{document}

% Define the file in here
\begin{filecontents*}{val.ssv}
0.25 0.5 0.75
\end{filecontents*}

\begin{filecontents*}{xval.ssv}
0.2 0.4 0.6 0.8
\end{filecontents*}

% read values from the file
\readdef{val.ssv}{\valdef}
\readArrayij{\valdef}{val}{1}

\readdef{xval.ssv}{\xvaldef}
\readArrayij{\xvaldef}{xval}{1}

\begin{tikzpicture}[font=\large]

\begin{axis}[%
width=10cm,
height=7cm,
xmin=0,
xmax=1,
xmajorgrids,
ymin=0,
ymax=1,
]

%\foreach \i in {1,...,3}
%{
%   \addplot [solid, color=black] table[row sep=crcr]{%
%       \arrayij{xval}{\i}{1}   \arrayij{val}{\i}{1}\\
%       \arrayij{xval}{\i}{1}   \arrayij{val}{\i}{1}\\
%       \arrayij{xval}{\i+1}{1} \arrayij{val}{\i}{1}\\
%   };}


    \addplot [solid, color=black] table[row sep=crcr]{%
    \arrayij{xval}{1}{1}    \arrayij{val}{1}{1}\\
    \arrayij{xval}{1}{1}    \arrayij{val}{1}{1}\\
    \arrayij{xval}{2}{1}    \arrayij{val}{1}{1}\\
};
    \addplot [solid, color=black] table[row sep=crcr]{%
    \arrayij{xval}{2}{1}    \arrayij{val}{2}{1}\\
    \arrayij{xval}{2}{1}    \arrayij{val}{2}{1}\\
    \arrayij{xval}{3}{1}    \arrayij{val}{2}{1}\\
};
    \addplot [solid, color=black] table[row sep=crcr]{%
    \arrayij{xval}{3}{1}    \arrayij{val}{3}{1}\\
    \arrayij{xval}{3}{1}    \arrayij{val}{3}{1}\\
    \arrayij{xval}{4}{1}    \arrayij{val}{3}{1}\\
};


\end{axis}

\end{tikzpicture}

\end{document}

\addplot我不想多次使用 -command,而是想使用\foreach-loop,就像上面最小示例中的注释行一样。不幸的是,调用\arrayij{xval}{\i+1}{1}不起作用。有人知道我必须做什么才能让它起作用吗?

\addplot我不想多次使用 -command,而是想使用\foreach-loop,就像上面最小示例中的注释行一样。不幸的是,调用\arrayij{xval}{\i+1}{1}不起作用。有人知道我必须做什么才能让它起作用吗?

在此处输入图片描述

答案1

使用 V2.0 的语法readarray(而不是已弃用的 V1.x)要容易得多。此外,解决用例中数组使用问题的关键是引入\the\numexpr求值\i+1

编辑以听取薛定谔的猫的评论建议,谁知道呢pgfplots(我不知道)。谢谢你的建议。

\documentclass[tikz]{standalone}

\usepackage[utf8]{inputenx}
\usepackage[T1]{fontenc}

\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\usepackage{xcolor}

% read variables from file
\usepackage{readarray}
\usepackage{filecontents}

\begin{document}

% Define the file in here
\begin{filecontents*}{val.ssv}
0.25 0.5 0.75 
\end{filecontents*}

\begin{filecontents*}{xval.ssv}
0.2 0.4 0.6 0.8 
\end{filecontents*}

% read values from the file
\readdef{val.ssv}\valdef
\readarray\valdef\val[-,1]

\readdef{xval.ssv}\xvaldef
\readarray\xvaldef\xval[-,1]

\begin{tikzpicture}[font=\large]

\begin{axis}[%
width=10cm,
height=7cm,
xmin=0,
xmax=1,
xmajorgrids,
ymin=0,
ymax=1,
]

\foreach \i in {1,...,3} 
{ 
  \edef\temp{\noexpand\addplot [solid, color=black] table[row sep=crcr]{% 
      \xval[\i,1]   \val[\i,1]\\ 
      \xval[\the\numexpr\i+1\relax,1] \val[\i,1]\\ };
}
\temp} 
\end{axis}
\end{tikzpicture}

\end{document}

注意:此代码与 OP 的 MWE 输出匹配,即使他/她发布的图像不匹配。

在此处输入图片描述


我还要指出的是,由于您的数据数组是一维的,因此您可以在读取文件后使用嵌入式包的功能listofitems来执行该过程(这里您甚至不需要\numexpr.

\documentclass[tikz]{standalone}

\usepackage[utf8]{inputenx}
\usepackage[T1]{fontenc}

\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\usepackage{xcolor}

% read variables from file
\usepackage{readarray}
\usepackage{filecontents}

\begin{document}

\setsepchar{ }
% Define the file in here
\begin{filecontents*}{val.ssv}
0.25 0.5 0.75 
\end{filecontents*}

\begin{filecontents*}{xval.ssv}
0.2 0.4 0.6 0.8 
\end{filecontents*}

% read values from the file
\readdef{val.ssv}\valdef
\readlist\val{\valdef}

\readdef{xval.ssv}\xvaldef
\readlist\xval{\xvaldef}

\begin{tikzpicture}[font=\large]

\begin{axis}[%
width=10cm,
height=7cm,
xmin=0,
xmax=1,
xmajorgrids,
ymin=0,
ymax=1,
]

\foreach \i in {1,...,3} 
{ 
  \edef\temp{\noexpand\addplot [solid, color=black] table[row sep=crcr]{% 
      \xval[\i]   \val[\i]\\ 
      \xval[\i+1] \val[\i]\\ };
}
\temp} 
\end{axis}
\end{tikzpicture}

\end{document}

相关内容