如何减少gnuplot的EPS格式输出?

时间:2013-06-25 18:36:34

标签: latex gnuplot eps

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

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

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

有人能建议我减少EPS情节的大小吗?

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

提前致谢,

3 个答案:

答案 0 :(得分:4)

我对此问题的解决方案是gnuplot中的“​​every”命令,即

plot "datafile" u 1:2 every 10

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

如果不需要,我通常会将eps转换为适当大小的光栅图像并将其转换回eps。在这里你还要玩解决方案等

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

我遇到了类似的问题,其中散点图超过10 ^ 6点会导致PDF文件> 100 MB。这些点以非常低的不透明度(1%)进行绘制,因此根本看不到许多分层的点,从而产生了更加平滑的密度分布而不是散点图。因此,我非常不愿意听从Raphael Roth的建议来筛选数据。

相反,我发现创建一个单独的Gnuplot脚本以使用pngcairo终端将数据绘制到具有足够分辨率的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轴上的坐标与散点图的点的实际位置匹配。

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

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