我正在尝试绘制一组 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 根本无法处理那么多数据?
编辑
答案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}