pgfplots:从文件读取数据时尺寸太大

pgfplots:从文件读取数据时尺寸太大

根据以下数据表data.dat

    x    a    b    c    d
    0    284.15    69.18    284.15    70.26
    0.03    284.15    70.20    284.15    70.04
    0.04    318.15    70.20    284.15    70.04
    0.1    318.15    70.20    284.15    70.04
    1    318.15    70.20    284.15    70.04
    5    314.75    70.20    284.13    70.04
    6    314.75    70.20    284.12    70.04
    10    314.75    70.20    284.10    70.05
    15    314.75    70.20    284.08    70.05
    20    284.05    70.20    284.05    70.05
    30    284.00    70.19    284.00    70.06
    50    283.90    70.19    283.90    70.07
    100    283.66    70.18    283.66    70.09
    200    283.60    70.17    283.58    70.12
    300    284.55    70.15    284.50    70.12
    400    286.12    70.11    286.06    70.09
    500    287.87    70.04    287.81    70.03
    600    289.58    69.95    289.53    69.94
    1000    294.97    69.31    294.94    69.32
    1500    298.86    67.98    298.85    68.00
    2000    300.84    66.05    300.84    66.09
    2500    301.64    63.48    301.84    63.53
    3000    301.60    60.19    301.62    60.27
    3500    300.85    56.08    300.88    56.19
    4000    299.45    50.95    299.49    51.10
    4500    297.31    44.46    297.38    44.69
    5000    294.20    35.93    294.33    36.31
    5500    289.36    23.33    289.64    24.14
    5700    286.21    15.29    286.73    16.73
    5710    286.00    14.77    286.55    16.28

我尝试绘制 x 在 [0,20] 中的第三列和第五列。这是我的 MWE,结果出现错误“尺寸太大”。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    width=0.45\textwidth,
    xmin=-2,
    xmax=20,
    ymin=70,
    ymax=72
]
    \addplot
    table[x index=0, y expr={\thisrowno{2}+1.01325}, header=true] {data.dat};

    \addplot
    table[x index=0, y expr={\thisrowno{4}+1.01325}, header=true] {data.dat};
  \end{axis}
\end{tikzpicture}
\end{document}

如果我裁剪数据表或使用环境文件内容,则不会发生错误。宽度和 xmax 的一些选择有效,而其他则无效。一般来说,较大的宽度似乎需要较大的 xmax。

有人知道错误的原因吗?

答案1

发生这种情况的原因是 PGFPlots 在内部绘制所有值,甚至包括不在可见范围内的值,并且只在最后将绘图剪裁到可见范围内。这导致部分点位于轴外很远的地方,太远了,TeX 无法处理。

restrict x to domain=-2:20您可以使用和过滤数据,restrict y to domain=70:72从数据流中删除您不感兴趣的点。仍然可以使用、等设置xmin限制xmax

\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents*}{data.dat}
    x    a    b    c    d
    0    284.15    69.18    284.15    70.26
    0.03    284.15    70.20    284.15    70.04
    0.04    318.15    70.20    284.15    70.04
    0.1    318.15    70.20    284.15    70.04
    1    318.15    70.20    284.15    70.04
    5    314.75    70.20    284.13    70.04
    6    314.75    70.20    284.12    70.04
    10    314.75    70.20    284.10    70.05
    15    314.75    70.20    284.08    70.05
    20    284.05    70.20    284.05    70.05
    30    284.00    70.19    284.00    70.06
    50    283.90    70.19    283.90    70.07
    100    283.66    70.18    283.66    70.09
    200    283.60    70.17    283.58    70.12
    300    284.55    70.15    284.50    70.12
    400    286.12    70.11    286.06    70.09
    500    287.87    70.04    287.81    70.03
    600    289.58    69.95    289.53    69.94
    1000    294.97    69.31    294.94    69.32
    1500    298.86    67.98    298.85    68.00
    2000    300.84    66.05    300.84    66.09
    2500    301.64    63.48    301.84    63.53
    3000    301.60    60.19    301.62    60.27
    3500    300.85    56.08    300.88    56.19
    4000    299.45    50.95    299.49    51.10
    4500    297.31    44.46    297.38    44.69
    5000    294.20    35.93    294.33    36.31
    5500    289.36    23.33    289.64    24.14
    5700    286.21    15.29    286.73    16.73
    5710    286.00    14.77    286.55    16.28
\end{filecontents*}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    width=0.45\textwidth,
    xmin=-2,
    xmax=20,
    restrict x to domain=-2:20,
    ymin=70,
    ymax=72,
    restrict y to domain=70:72
]
    \addplot
    table[x index=0, y expr={\thisrowno{2}+1.01325}, header=true] {data.dat};

    \addplot
    table[x index=0, y expr={\thisrowno{4}+1.01325}, header=true] {data.dat};
  \end{axis}
\end{tikzpicture}
\end{document}

相关内容