如何使用非常大的数据集和 pgfplots 而不使 pdf 花费很长时间来加载?

如何使用非常大的数据集和 pgfplots 而不使 pdf 花费很长时间来加载?

我正在处理一个非常大的数据集 - 几乎有 120,000 个观测值 - 并且我正在使用 pgfplots 制作一些图表。这个过程很顺利,特别是使用外部库时,但 pdf 文档需要很长时间才能加载。似乎 Adob​​e 正在单独绘制每个数据点。

有没有更好的方法来使用 pgfplots 使图表更容易呈现?

我的设置是:

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize

\begin{document}

\begin{figure}[h]
\footnotesize
\centering
\caption{Publicly Available Num Tested, MEAP\_stacked Number Valid}
\begin{tikzpicture}
\begin{axis}[
only marks,
width=6.2in,
ylabel={Number Tested, Public Data},
xlabel={Number Valid, Our Data},
area legend,
legend style = {at={(axis cs:700,0)},anchor=south east},
xmin=-50,
ymin=-50]
\input{statistics/Num_Valid_Writing.tex}
\addlegendentry{Writing}
\input{statistics/Num_Valid_Math.tex}
\addlegendentry{Math}
\input{statistics/Num_Valid_ELA.tex}
\addlegendentry{ELA}
\input{statistics/Num_Valid_Science.tex}
\addlegendentry{Science}
\input{statistics/Num_Valid_SS.tex}
\addlegendentry{Social Studies}
\input{statistics/Num_Valid_Reading.tex}
\addlegendentry{Reading}
\end{axis}
\end{tikzpicture}
\end{figure}

\end{document}

我正在使用 pdfLaTeX 和带有 TeXLive 的 Ubuntu。

谢谢!

答案1

这个答案可能需要 pgf CVS,我不知道。

可以定制外部库来自行生成 png——具有正确缩放的图像。

pgf(CVS?)的 pgfmanual 在其外部库文档的第 34.7 节“位图图形导出”中详细描述了该过程。

诀窍是使用


\tikzset{
    % Defines a custom style which generates BOTH, .pdf and .png export
    % but prefers the .png on inclusion.
    %
    % This style is not pre-defined, you may need to copy-paste and
    % adjust it.
    png export/.style={
        external/system call/.add={}{; convert -density 300 -transparent white "\image.pdf" "\image.png"},
        %
        /pgf/images/external info,
        /pgf/images/include external/.code={%
            \includegraphics
            [width=\pgfexternalwidth,height=\pgfexternalheight]
            {##1.png}%
        },
    },
    %
    png export,% ACTIVATE
}

在你的序言中。

涉及三个步骤:

a) 修改系统调用(没问题,任何版本的外部库都可以)

b)/pgf/images/external info密钥(可能仅是 pgf CVS)为每个导出的图像生成 TeX 尺寸信息并进行适当存储。

\pgfexternalwidthc)加载图像时的使用(这实际上是这个“外部信息”的输出)。

我建议的解决方案中的语句\tikzset定义了一种新样式“png 导出”。您可以只为单张图片启用它,而不是像我的解决方案那样全局启用它,方法是


{% from here on, png export will be used....
\tikzset{png export}%
\begin{tikzpicture}
....
\end{tikzpicture}
}% here ends the png export

答案2

存在一个阈值,在此阈值上,给定的绘图最好以光栅图像的形式显示。这是矢量格式的固有限制。

最简单的解决方案是向外部化过程添加一个步骤,以便将外部 PDF 中的图转换为光栅格式。例如:

 convert -density 600 external_file.pdf -scale 800 external_file.png
 mv external_file.pdf external_file-bak.pdf

图像的质量可以通过 Imagemagic“转换”命令中的选项来控制。

为了获得更好的结果,可以将其与手册中第 4.2.8 节“使用外部图形作为绘图源”中描述的技术相结合,这样只有绘图而不是轴是光栅图像;但这需要更多的工作。

相关内容