subfig 环境中的 pgfplots 出现多个错误

subfig 环境中的 pgfplots 出现多个错误

我正在尝试使用该包将两个图形并排放置subfig(我过去曾这样做过,甚至使用tikzpictures)但我遇到了一个问题。

每当我尝试编译我的文档时,我都会收到多个错误,包括:

Paragraph ended before \pgfplots@addplotimpl@table@startprocessing was complete. }
Extra }, or forgotten \endgroup. }
Package PGF Math Error: Sorry, an internal routine of the floating point unit '0.0'.. }
Illegal unit of measure (pt inserted). }

尝试调试这个,我评论了tikzpicture环境并且它编译成功,然后我评论了除tikzpicture部分之外的所有内容并且它再次编译!

什么可能导致这组错误?

我的 MWE 是:

\documentclass[12pt,letterpaper,twoside]{report}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{subfig}  
\begin{document}
    \begin{figure}
    \centering
    \subfloat[caption1.]
    {\label{label1}%
        \begin{tikzpicture}
    \begin{axis}[%
    scatter/classes={%
        a={mark=o,draw=red},b={draw=blue}},
    xlabel={Pieza},
    ylabel={Medición},legend pos=outer north east]
    \addplot[scatter,only marks,ycomb,%
    scatter src=explicit symbolic]%
    table[meta=label] {
        x y label
        1   0.2842  a
        2   0.2985  a
        3   0.2509  a
        4   0.2314  a
        5   0.2091  a
        6   0.2046  a
        7   0.3177  a
        8   0.215   a
        9   0.2057  a
        10  0.2244  a


    };
    \addplot[scatter,only marks,ycomb,%
    scatter src=explicit symbolic]%
    table[meta=label] {
        x y label
        1   0.1284  b
        2   0.1857  b
        3   0.1068  b
        4   0.2618  b
        5   0.2061  b
        6   0.3119  b
        7   0.3589  b
        8   0.2599  b
        9   0.2745  b
        10  0.2044  b



    };
    \legend{LVDT,CMM}

    \end{axis}
    \end{tikzpicture}
} 
    \quad
    \subfloat[caption2.]
    {\label{label2}%
    \begin{tikzpicture}
    \begin{axis}[%
    scatter/classes={%
        a={mark=o,draw=black}},
    xlabel={Temperatura (\(^{\circ}\)C)},
    ylabel={Perpendicularidad (\(^{\circ}\)}]
    \addplot[scatter,only marks,%
    scatter src=explicit symbolic]%
    table[meta=label] {
        x y label
        51.24       -0.4545 a
        60.13       0.046   a
        58.68       -0.1905 a
        54.03       -0.339  a
        55.16       0.3885  a
        56.62       0.1 a
        54.09       0.0365  a
        58.06       -0.1215 a
        57.05       0.126   a
        52.26       0.4025  a

    };
    \end{axis}
    \end{tikzpicture}
} 
    \caption{caption3}\label{label3}
\end{figure}
\end{document}

我评论的tikzpicture环境MWE是:

\documentclass[12pt,letterpaper,twoside]{report}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{subfig}  
\begin{document}
    \begin{figure}
    \centering
    \subfloat[caption1.]
    {\label{label1}%
%       \begin{tikzpicture}
%   \begin{axis}[%
%   scatter/classes={%
%       a={mark=o,draw=red},b={draw=blue}},
%   xlabel={Pieza},
%   ylabel={Medición},legend pos=outer north east]
%   \addplot[scatter,only marks,ycomb,%
%   scatter src=explicit symbolic]%
%   table[meta=label] {
%       x y label
%       1   0.2842  a
%       2   0.2985  a
%       3   0.2509  a
%       4   0.2314  a
%       5   0.2091  a
%       6   0.2046  a
%       7   0.3177  a
%       8   0.215   a
%       9   0.2057  a
%       10  0.2244  a
%       
%       
%   };
%   \addplot[scatter,only marks,ycomb,%
%   scatter src=explicit symbolic]%
%   table[meta=label] {
%       x y label
%       1   0.1284  b
%       2   0.1857  b
%       3   0.1068  b
%       4   0.2618  b
%       5   0.2061  b
%       6   0.3119  b
%       7   0.3589  b
%       8   0.2599  b
%       9   0.2745  b
%       10  0.2044  b
%       
%       
%       
%   };
%   \legend{LVDT,CMM}
%   
%   \end{axis}
%   \end{tikzpicture}
} 
    \quad
    \subfloat[caption2.]
    {\label{label2}%
%   \begin{tikzpicture}
%   \begin{axis}[%
%   scatter/classes={%
%       a={mark=o,draw=black}},
%   xlabel={Temperatura (\(^{\circ}\)C)},
%   ylabel={Perpendicularidad (\(^{\circ}\)}]
%   \addplot[scatter,only marks,%
%   scatter src=explicit symbolic]%
%   table[meta=label] {
%       x y label
%       51.24       -0.4545 a
%       60.13       0.046   a
%       58.68       -0.1905 a
%       54.03       -0.339  a
%       55.16       0.3885  a
%       56.62       0.1 a
%       54.09       0.0365  a
%       58.06       -0.1215 a
%       57.05       0.126   a
%       52.26       0.4025  a
%       
%   };
%   \end{axis}
%   \end{tikzpicture}
} 
    \caption{caption3}\label{label3}
\end{figure}
\end{document}

除了 s 评论之外,我的 MWE 其余内容tikzpicture如下:

\documentclass[12pt,letterpaper,twoside]{report}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{subfig}  
\begin{document}
%   \begin{figure}
%   \centering
%   \subfloat[caption1.]
%   {\label{label1}%
        \begin{tikzpicture}
    \begin{axis}[%
    scatter/classes={%
        a={mark=o,draw=red},b={draw=blue}},
    xlabel={Pieza},
    ylabel={Medición},legend pos=outer north east]
    \addplot[scatter,only marks,ycomb,%
    scatter src=explicit symbolic]%
    table[meta=label] {
        x y label
        1   0.2842  a
        2   0.2985  a
        3   0.2509  a
        4   0.2314  a
        5   0.2091  a
        6   0.2046  a
        7   0.3177  a
        8   0.215   a
        9   0.2057  a
        10  0.2244  a


    };
    \addplot[scatter,only marks,ycomb,%
    scatter src=explicit symbolic]%
    table[meta=label] {
        x y label
        1   0.1284  b
        2   0.1857  b
        3   0.1068  b
        4   0.2618  b
        5   0.2061  b
        6   0.3119  b
        7   0.3589  b
        8   0.2599  b
        9   0.2745  b
        10  0.2044  b



    };
    \legend{LVDT,CMM}

    \end{axis}
    \end{tikzpicture}
%} 
%   \quad
%   \subfloat[caption2.]
%   {\label{label2}%
    \begin{tikzpicture}
    \begin{axis}[%
    scatter/classes={%
        a={mark=o,draw=black}},
    xlabel={Temperatura (\(^{\circ}\)C)},
    ylabel={Perpendicularidad (\(^{\circ}\)}]
    \addplot[scatter,only marks,%
    scatter src=explicit symbolic]%
    table[meta=label] {
        x y label
        51.24       -0.4545 a
        60.13       0.046   a
        58.68       -0.1905 a
        54.03       -0.339  a
        55.16       0.3885  a
        56.62       0.1 a
        54.09       0.0365  a
        58.06       -0.1215 a
        57.05       0.126   a
        52.26       0.4025  a

    };
    \end{axis}
    \end{tikzpicture}
%} 
%   \caption{caption3}\label{label3}
%\end{figure}
\end{document}

答案1

问题是您要求从中的参数pgfplotstable读取内联表格数据。一旦展开宏,这个带括号的参数就会被标记,结果是表格数据中的单个行尾与空格变得无法区分:标记后两者都变为空格标记1。直接的后果是无法读取表格,因为它看不到行在哪里结束。...\subfloat[caption x.]{...}\subfloatpgfplotstable

有几种方法可以解决这个问题。取决于其他提供 subcaption 的类似包环境已经实现(例如,subcaption有一个subfigure环境),只需切换到这样的解决方案就可以了。但如果环境主体被理解为分隔参数,这是一种可能性,问题仍然存在。

另一种方法(也是我在此建议的方法)是在其他地方读取表格数据,在单个行尾与空格截然不同的地方。这可以通过\pgfplotstableread允许读取表格数据并将结果存储在您选择的宏中的命令来完成。

我添加了\pgfplotsset{compat=1.16}以确保代码的可重复性。我还将文档设置为横向模式,否则由于空间不足,两个子图的排列不会很引人注目——当然,您可以找到其他纵向模式的解决方案。

\documentclass[landscape]{article}
\usepackage{geometry}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{pgfplotstable}
\usepackage{subfig}

\pgfplotstableread{
x   y       label
1   0.2842  a
2   0.2985  a
3   0.2509  a
4   0.2314  a
5   0.2091  a
6   0.2046  a
7   0.3177  a
8   0.215   a
9   0.2057  a
10  0.2244  a
}\myFirstTable

\pgfplotstableread{
x   y       label
1   0.1284  b
2   0.1857  b
3   0.1068  b
4   0.2618  b
5   0.2061  b
6   0.3119  b
7   0.3589  b
8   0.2599  b
9   0.2745  b
10  0.2044  b
}\mySecondTable

\pgfplotstableread{
x       y        label
51.24   -0.4545  a
60.13   0.046    a
58.68   -0.1905  a
54.03   -0.339   a
55.16   0.3885   a
56.62   0.1      a
54.09   0.0365   a
58.06   -0.1215  a
57.05   0.126    a
52.26   0.4025   a
}\myThirdTable

\begin{document}

  \begin{figure}
    \centering
    \subfloat[caption1.]
      {%
        \label{label1}%
        \begin{tikzpicture}
          \begin{axis}[%
              scatter/classes={%
              a={mark=o,draw=red},b={draw=blue}},
              xlabel={Pieza},
              ylabel={Medición},legend pos=outer north east]
          \addplot[scatter, only marks, ycomb, scatter src=explicit symbolic]
            table[meta=label] {\myFirstTable};
          \addplot[scatter, only marks, ycomb, scatter src=explicit symbolic]
            table[meta=label] {\mySecondTable};
          \legend{LVDT,CMM}
          \end{axis}
        \end{tikzpicture}%
      }%
    \quad
    \subfloat[caption2.]
      {%
        \label{label2}%
        \begin{tikzpicture}
          \begin{axis}[%
          scatter/classes={%
              a={mark=o,draw=black}},
          xlabel={Temperatura (\(^{\circ}\)C)},
          ylabel={Perpendicularidad (\(^{\circ}\))}]
          \addplot[scatter, only marks, scatter src=explicit symbolic]
            table[meta=label] {\myThirdTable};
          \end{axis}
        \end{tikzpicture}%
      }%
    \caption{caption3}\label{label3}
  \end{figure}

\end{document}

截屏


脚注

  1. 即字符代码为 32、类别代码为 10 的字符标记。

相关内容