即使使用 \tikzexternalize,TeX 容量也超出范围

即使使用 \tikzexternalize,TeX 容量也超出范围

我正在尝试绘制一组 10000 个点,但出现了错误TeX capacity exceeded, sorry [main memory size=5000000].
我正在使用外部化。

这是我的 MWE。

\documentclass{report}

\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usepgfplotslibrary{external}
\tikzexternalize

\usepackage[arrowmos,european]{circuitikz}
\usepackage{siunitx}
\usepackage{float}
\usepackage{hyperref}
\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=blue
}   
\usepackage{geometry}
\geometry{
    a4paper,
    total={170mm,257mm},
    left=20mm,
    top=20mm,
}

\newcommand*{\subb}[1]{_{\mathrm{#1}}}
\newcommand*{\supp}[1]{^{\mahtrm{#1}}}

\begin{document}
    \begin{figure}[H]
        \begin{tikzpicture}
            \begin{axis}[xlabel=a,ylabel=b,width=\linewidth]% coordinates
            \foreach \i in {1,...,10}
            \addplot table[x index=0, y index=\i, col sep = comma] {data.csv};
            \end{axis}
        \end{tikzpicture}
    \end{figure}
\end{document}

文件data.csv只是一组随机的 10000 个点(稍后将被实际数据替换)。

有什么解决办法吗?还是说 TeX 根本无法处理那么多数据?

编辑


使用仅 200 个点的集合,输出如预期的那样: 在此处输入图片描述

答案1

这不是一个答案,而是一个扩展的评论
Hood Chatham 在评论中已经给出了答案(使用 lualatex)。

(但我认为它足够有趣,值得这么做。)

对于包含大量数据点的图,标记对所用内存有很大影响。我对几个包含 500 个点和 10 个图的标记进行了测试。结果如下(以 ASCII 表的形式):

option              data points     remark
                    500      250
                ----------------
[mark=none]     1170026   947012    approx. 0.87k/data point
[mark=square]   1268175
[mark=triangle] 1485689
[mark=diamond]  1614367
[mark=pentagon] 1743355
[mark=+]        1749165
[mark=x]        1749223
[](1)           2197715  1458330    approx. 2.89k/data point
[mark=star]     2351954
[mark=*]        2621674
[mark=o]        2621674
[mark=otimes]   3136768
[mark=ball](2) >3500000  3433143
----------
(1) default mix of marks (*, square*, otimes*, star, diamond*)
(2) TeX capacity exceeded

因此,如果不能使用 lualatex,那么绘制此类图时不做标记是个好主意。或者至少应该仔细选择标记。

数据生成方式与 David Carlisles 的评论类似

c=0; while [ $c -le 500 ] ; do echo "$c,$RANDOM,$RANDOM,$RANDOM,$RANDOM,$RANDOM,$RANDOM,$RANDOM,$RANDOM,$RANDOM,$RANDOM"; let "c +=1"; done > data-500.csv

测试是用

\documentclass[border=1mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[xlabel=a,ylabel=b,width=\linewidth]% coordinates
    \foreach \i in {1,...,10}
        \addplot+[] table[x index=0, y index=\i, col sep = comma] {data-500.csv};
    \end{axis}
\end{tikzpicture}
\end{document}

相关内容