6

我有大量数据,我想从中创建散点图并将其包含在我的 LaTeX 文档中。我使用 gnuplot 生成具有 epslatex 输出格式的散点图,以便能够轻松地将数据导入我的 LaTeX 文档。

我的问题是 EPS 文件太大(每个图大约 14MB),这将导致输出文件非常大。显然,原因是所有数据都包含在不需要的 EPS 文件中。

但是,我找不到压缩 EPS 文件的方法。唯一的方法是减少我拥有的样本点数量,但出于技术原因,我不希望这样做。

谁能建议我一种减小 EPS 图大小的方法?

我尝试使用 ImageMagick 并降低 EPS 文件的分辨率(如convert -units PixelsPerInch plot.eps -density 300 plot2.eps),但它缩小了尺寸,这不是我想要的。

提前致谢,

4

3 回答 3

4

我对这个问题的解决方案是gnuplot中的“​​每个”命令,即

plot "datafile" u 1:2 every 10

像这样,您已经可以将 eps 图形的大小减小 ~ 10 倍。当然,您需要自己弄清楚可以省略多少数据而不会丢失太多信息,即图形仍应包含您想要的所有功能形象化。

如果不需要,我通常将 eps 转换为适当大小的光栅图像并将其转换回 eps。同样在这里你必须玩弄分辨率等

于 2013-06-26T11:19:32.790 回答
2

.eps 文件的问题不一定是分辨率(它们是矢量图形),而是 gnuplot 在创建文件时包含的信息量。Gnuplot 倾向于绘制包含大量额外信息的 .eps 文件,特别是对于 2D 绘图和具有大量点的绘图。例如,对于在边缘连接的红色正方形网格以形成一个大红色正方形,gnuplot 将绘制大量的红色小正方形而不是大正方形。这个问题在这篇博文的末尾提到,他们说这产生的输出比制作热图plot ... with image要小得多。splot

不过,听起来您没有使用splot.pdf,因此您可以尝试制作 .pdf 而不是 .eps,如果您需要 .eps 使用pdf2ps或其他程序进行转换。这可能会有所帮助...

出于好奇,您要绘制多少点?如果您可以提供有关您使用的数据量的想法,以及您现在正在使用的一些示例代码,我们可能会提供更好的想法。

于 2013-06-25T19:15:43.123 回答
2

我遇到了一个类似的问题,超过 10^6 点的散点图导致 PDF 文件大于 100 MB。这些点以非常低的不透明度 (1%) 绘制,因此根本只有许多分层点可见,从而产生更平滑的密度分布而不是散点图。因此,我非常不愿意听从 Raphael Roth 的建议并精简数据。

pngcairo相反,我发现创建一个单独的 Gnuplot 脚本以使用终端将数据绘制为具有足够分辨率的 PNG 位图图像很有用。该图没有轴,没有抽动,没有边框,也没有边距——只有在适当坐标中绘制的数据:

set terminal pngcairo transparent size 400,400
set output 'foo.png'
set margins 0,0,0,0
set border 0
unset xtics
unset ytics
# set xrange, yrange appropriately
plot ... with points notitle

然后,在实际绘图中(我使用了cairolatex终端),我绘制了这个 PNG 图像:

set terminal cairolatex pdf
# regular setup, using the same xrange and yrange
plot 'foo.png' binary filetype=png with rgbalpha axes x2y2

请注意,我使用另一组(无刻度)轴进行绘图,以确保图像填充图形区域而没有任何边框,因此 x1y1 轴上的 tic 与散点图中点的实际位置相匹配。

PNG 最终只有几十 KB,而 PDF 则只有几 MB。我认为rgbalpha情节风格(类似于with image)不是最有效的,但这对我来说已经足够了。

希望有人会发现这很有用。

于 2019-06-13T13:04:43.010 回答