Texmaker 在迭代数组并使用 pgfplots 绘图时冻结

Texmaker 在迭代数组并使用 pgfplots 绘图时冻结

我编写了一个 latex 代码,它遍历两个数组并为数组的每个条目创建一个图。但是,我的 Texmaker 却出乎意料地卡住了(我的 CPU 完全发挥了处理能力——就像一个无限循环)。

代码的每个部分在语法上都是有意义的,但我想知道它在乳胶中是否有意义。

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{setspace}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{colortbl}
\usepackage{graphicx}
\usepackage{subfigure}
\usepackage{epsfig}
\usepackage{multirow}
\usepackage{color}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\usetikzlibrary{patterns}
\usepackage{subfig}
\usepackage{arrayjob}


\begin{document}

%%%%% This is the template for my plots
\newcommand{\plotprh}[3] {
\subfigure[$\ell=#1$]{%
    \begin{tikzpicture}
    \begin{axis}[
        height=5cm, 
        width=6cm,
        xlabel={$k'$},
        ylabel={Percent (\%)},
        legend pos=north west,
        legend cell align=left,
        ylabel style={at={(0.05,0.5)},font=\small},
        xlabel style={at={(0.5,0.04)},font=\small},
        legend style={at={(0.04,0.05)},anchor=south west, nodes={scale=0.8, transform shape},font=\small,}
    ]
    \addplot[]
        coordinates { % Precision
        #2
        };
    \addplot[]
        coordinates { % Recall
        #3
        };
        \legend{Precision, Recall}
    \end{axis}
    \end{tikzpicture}
    }
  }

%%%%% Here is the data that I need which I put in two arrays
\newarray\recalls
\readarray{recalls}{ (1, 9.600000e-01) (2, 9.200000e-01) (3, 0.000000e+00) (4, 0.000000e+00) & (1, 9.600000e-01) (2, 9.600000e-01) (3, 0.000000e+00) (4, 0.000000e+00) }
\newarray\precisions
\readarray{precisions}{ (1, 8.099681e-01) (2, 7.699681e-01) (3, 0.000000e+00) (4, 0.000000e+00) & (1, 8.099681e-01) (2, 8.099681e-01) (3, 0.000000e+00) (4, 0.000000e+00) }

%%%%%% Here is how I try to plot it
\begin{figure}[h]
    \centering
    \foreach \index in {1, ..., 2}
    {%
        \plotprh{\index}{\precisions(\index)}{\recalls(\index)}
    }%
\end{figure}

\end{document}

答案1

笔记:我不太确定您在这里期望什么输出。

arrayjob下面的文档\readarray(目前为第 3 页)指定应&在数组中的每个条目之间使用。

请注意,您始终可以通过命令行/终端输入 来查找文档texdoc arrayjob,这适用于任何软件包。该文档也可在以下位置找到:http://ctan.org/pkg/arrayjob

在下面的代码中,我没有使用arrayjob,虽然你可能可以使用它,但还有其他方法可以创建数组而无需使用额外的包。由于您已经通过加载tikzpgfplots我建议只使用那里描述的语法。此外,如果您在每个条目之间添加换行符,您的数据点会变得更容易阅读。我在这里将您的两个数组合并为一个,以方便使用。

输出

在此处输入图片描述

代码

\documentclass{article}
\usepackage{subfigure}
\usepackage{pgfplots}

%%%%% This is the template for my plots
\newcommand{\plotprh}[3] {
\subfigure[$\ell=#1$]{%
    \begin{tikzpicture}
    \begin{axis}[
        height=5cm, 
        width=6cm,
        xlabel={$k'$},
        ylabel={Percent (\%)},
        legend pos=north west,
        legend cell align=left,
        ylabel style={at={(0.05,0.5)},font=\small},
        xlabel style={at={(0.5,0.04)},font=\small},
        legend style={at={(0.04,0.05)},anchor=south west, nodes={scale=0.8, transform shape},font=\small,}
    ]
    \addplot
        coordinates { % Precision
        #2
        };
    \addplot
        coordinates { % Recall
        #3
        };
        %   \legend{Precision, Recall}
    \end{axis}
    \end{tikzpicture}
    }
  }

\def\plotData{%
    {(1,9.600000e-01)}/{(1,8.099681e-01)},%
    {(2,9.200000e-01)}/{(2,0.000000e+00)},%
    {(3,0.000000e+00)}/{(3,0.000000e+00)},%
    {(4,0.000000e+00)}/{(4,0.000000e+00)}%
    }

\begin{document}



\begin{figure}[h]
    \centering
    \foreach \recall/\precision  [count=\i] in \plotData
    {%
        \plotprh{\i}{\precision}{\recall}%
    }%
\end{figure}

\end{document}

相关内容