散点图超出内存容量

散点图超出内存容量

我正在尝试叠加散点图和条形图。当我尝试执行代码时,我得到“TeX 容量超出,抱歉 [主内存大小=3000000]”。\pgfplotsapplistXXpushback@smallbufoverfl ...toka

csv 文件在这里:文件1文件2 latex 能处理这些数据吗?Excel 可以,为什么 latex 不能?谢谢你的帮助。

\documentclass[tikz]{standalone}    
\usepackage[utf8]{inputenc}
\usepackage{pgfplots,tikz}
\usepackage{fixltx2e}
\usepackage{siunitx}
\usepackage{xcolor}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=newest,width=\textwidth,xlabel={fractions},ylabel={Phospho hits},cycle list name=color list,legend columns=2}
\pagestyle{empty}
\begin{document}

\begin{tikzpicture}
\begin{axis}
\addplot table [ybar,col sep=comma, x=fractions, y=Phospho] {SCX1.csv};
\addplot table [col sep=comma, x=min, y=mv] {SCX01-HPLC.csv};

\end{axis}
\end{tikzpicture}
\end{document}

答案1

因为超出了内存。在第一个 csv 中,您有 39768 行,这可不少!有两种方法:

  1. 使用 lualatex 编译你的文档(在我的电脑上需要 8 秒)

使用 lualatex 输出

  1. 使用从旧 csv 中获得“仅”有 3060 个点的抽取 csv,并使用 pdflatex 进行编译(大约需要 2 秒):

使用 pdflatex 抽取数据

你能看出有什么不同吗?我看不出来!

为了减少数据的采样,我使用了 Matlab,但我相信还有其他方法。假设您的 csv 表的名称是,data.csv您可以将其复制并粘贴到 Matlab 上以打开数据导入向导,并将工作区中的内容放在我调用的矩阵变量中mydata(第一行包含 -vector x,第二列包含 -vector y)。为了减少点数,您可以(Matlab 代码):

min=decimate(mydata(:,1),13);
mv=decimate(mydata(:,2),13);

要将输出转换为 csv 文件:

writetable(table(min,mv),'decimatedDATA.csv');

瞧!您有一组新的点,其数量减少了 13 倍,pdflatex 也可以处理。

个人说明:如果你只需要绘制此图,只需使用 lualatex,但请记住包含 pdf 而不是 tex 源。如果你有许多图(可能在同一个图中),即使 lualatex可能能够处理内存,编写报告需要很长时间,因此我会选择第二种选择。

答案2

根据您在 mirkom 的回答中的评论...如果您是 R 用户,为什么不这样做呢knitr

\documentclass{article}
\begin{document}
A nice scatter plot in \LaTeX: 
<<echo=F,  dev='tikz', fig.width=6, fig.height=6>>=
read.csv("file1.csv") -> x
plot(x,type="l",xlab="fractions",ylab="Phospho hits", col="blue", lwd=2)
@
\end{document}

姆韦

相关内容