如何从文件夹中随机选择并绘制 csv 文件

如何从文件夹中随机选择并绘制 csv 文件

我在一个文件夹中有data1.csvdata2.csv和。data3.csv

我用pythontex从 1 到 3 中随机选择一个数字。

\begin{pycode}
list = random.sample(range(1, 3), 3)
select = list[0]
\end{pycode}

然后在文档中我尝试使用命令

\addplot table [] {data\py{select}.csv};

但它不起作用。

我们如何才能读取像这样随机选择的文件data#.csv#

答案1

这是一个扩展问题。文件参数必须完全可扩展,因此在使用之前,您需要有一个已扩展随机的宏或数字\addplot。例如,您可以使用random

% Somewhere in the document preamble:
\input{random.tex}
\newcount\randomselect

并尝试类似

\setrannum{\randomselect}{1}{3}
\edef\randomdata{data\the\randomselect.csv}

之前某处\addplot。为了能够使用

\addplot table [] {\randomdata}

这是一个简短的例子:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{filecontents*}{data1.csv}
1 1
5 1
\end{filecontents*}
\begin{filecontents*}{data2.csv}
1 1
5 2
\end{filecontents*}
\begin{filecontents*}{data3.csv}
1 1
5 3
\end{filecontents*}

\input{random}
\newcount\randomselect
\newcommand*{\randomdata}{NotInitialized}
\newcommand*{\newrandomdata}[2]{%
  \setrannum{\randomselect}{#1}{#2}%
  \edef\randomdata{data\the\randomselect.csv}%
}

\begin{document}
\begin{tikzpicture}
  \begin{axis}
    \newrandomdata{1}{3}%
    \addplot [red] table {\randomdata};
    \newrandomdata{1}{3}%        
    \addplot [blue] table {\randomdata};
    \newrandomdata{1}{3}%
    \addplot [green] table {\randomdata};
    \legend{first,second,third}
  \end{axis}
\end{tikzpicture}
\end{document}

另一个非常好的建议是使用序列expl3。这样你就不需要有数字文件名了:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{filecontents*}{dataA.csv}
1 1
5 1
\end{filecontents*}
\begin{filecontents*}{dataX.csv}
1 1
5 2
\end{filecontents*}
\begin{filecontents*}{data3.csv}
1 1
5 3
\end{filecontents*}

\ExplSyntaxOn
\seq_new:N \my_data_files_seq
\seq_set_from_clist:Nn \my_data_file_seq { dataA.csv, dataX.csv, data3.csv }
\newcommand*{\randomdata}{\seq_rand_item:N \my_data_file_seq}
\ExplSyntaxOff

\begin{document}
\begin{tikzpicture}
  \begin{axis}
    \addplot [red] table {\randomdata};
    \addplot [blue] table {\randomdata};
    \addplot [green] table {\randomdata};
    \legend{first,second,third}
  \end{axis}
\end{tikzpicture}
\end{document}

但是,对于这两个建议,不要指望只有三个数字就能产生很大的随机性!真正的随机性需要很大的范围。因此,这个例子有时显示三行,有时只显示两行或一行。有时多次运行这个例子会显示相同的结果。

相关内容