如果我们运行以下 Python 程序,我们会得到 100,000 行test.dat
import random
with open("test.dat","w") as f:
f.write("x y label\n")
for i in range(0,100000):
clazz = 0
if i % 2 == 0:
clazz = 1
f.write(str(random.uniform(-10,10))+" "+str(random.uniform(-10,10))+" "+str(clazz)+"\n")
如果我现在pdflatex -shell-escape test.tex
在以下 MWE 上运行,它会崩溃:
失败原因:TeX capacity exceeded, sorry [main memory size=5000000].
然而kpsewhich -a texmf.cnf
有报道称:
/etc/texmf/web2c/texmf.cnf
/usr/share/texmf/web2c/texmf.cnf
/usr/share/texlive/texmf-dist/web2c/texmf.cnf
但是第一个文件中没有这个设置。在其他两个文件中,我可以将其缩放到 12000000,然后fmtutil-sys --all
:
- 我仍然有这个错误;
- 它仍然告诉我有 5000000。但是它似乎拾取了这些值,因为如果我超过(15000000),我就会收到错误
Ouch---my internal constants have been clobbered!---case 14
,但如果我将设置更改为 12,为什么它会报告 5?
这怎么可能?
如何使其工作?(PS:是的,对于 100K 你会有一些重叠,但实际上它接近 50K,并且我想避免预处理以减少重叠,因为重叠也取决于缩放)。
平均能量损失
\documentclass{book}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{external}
\tikzexternalize
\begin{document}
\begin{figure}
\centering
\resizebox {\columnwidth} {!} {
\begin{tikzpicture}
\pgfplotsset{ticks=none}
\begin{axis}[legend style={
at={(0,0)},legend columns=2, /tikz/column 2/.style={
column sep=10pt,
},
anchor=north west,at={(axis description cs:0,-0.03)}}]]
\addplot[fill opacity=0.4,draw opacity=0.4,
scatter/classes={
0={mark=*,green},
1={mark=*,red}
},
scatter, only marks,
scatter src=explicit symbolic]
table[x=x,y=y,meta=label]
{test.dat};
\legend{Class A, Class B}
\end{axis}
\end{tikzpicture}
}
\end{figure}
\end{document}
答案1
设置的大小是有限制的,不过你可以使用 luatex,它使用动态内存。这需要很长时间(在 xpdf 中渲染也需要很长时间),但是
你缺少了两%
行末尾的行,我也添加了
\RequirePackage{luatex85}
\documentclass{book}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{external}
\tikzexternalize
\begin{document}
\begin{figure}
\centering
\resizebox {\columnwidth} {!} {%%%
\begin{tikzpicture}
\pgfplotsset{ticks=none}
\begin{axis}[legend style={
at={(0,0)},legend columns=2, /tikz/column 2/.style={
column sep=10pt,
},
anchor=north west,at={(axis description cs:0,-0.03)}}]]
\addplot[fill opacity=0.4,draw opacity=0.4,
scatter/classes={
0={mark=*,green},
1={mark=*,red}
},
scatter, only marks,
scatter src=explicit symbolic]
table[x=x,y=y,meta=label]
{test.dat};
\legend{Class A, Class B}
\end{axis}
\end{tikzpicture}%%%%
}
\end{figure}
\end{document}