Gnuplot 内存不足

3

我正在使用Gnuplot绘制图表。但由于内存占用过高,它无法正常工作或在几分钟内被杀死。

我的笔记本电脑内存为4GB。文件大小约为1GB至1.5GB。实际上,我是C语言和Gnuplot的初学者。我不理解的是,为什么这个“看起来很简单”的任务需要这么多的内存。它只是匹配t和x之间的点。

下面会提供文件的一部分内容以及我在终端上编写的代码:

plot "fl1.dat" u 1:2 linetype 1.

1.00000e+00 1.88822e-01

2.00000e+00 3.55019e-01

3.00000e+00 -1.74283e+00

4.00000e+00 -2.67627e+00

...

...

...

我的问题是唯一的解决方法是增加更多的内存,还是使用实验室中的计算机?

谢谢。


你有多少数据点?32位系统还是32位gnuplot? - Christoph
系统是64位的。我对gnuplot不太确定。我该如何检查呢?然后,数据点有4e7个。 - supergentle
当启动gnuplot时,它会告诉你构建系统。当绘制一个如此庞大的文件时,32位构建还会出现内存不足的错误。64位构建可以绘制数据,但根据所使用的输出终端,可能会开始进行磁盘交换。顺便问一下:你对于4000万个数据点有什么期望呢? - Christoph
我的gnuplot是64位构建的。我重新检查了一下。实际上,我完全没有感觉。我就是无法理解它需要那么多的内存和时间。对我来说,这似乎是非常简单的工作。 - supergentle
2个回答

3

数据文件的绘图是为了查看某个数量的整体或全局行为,而不是局部行为,对于局部行为,您可以从数据文件中查看值。这样说,在您的情况下,我认为您不需要绘制文件中的每个点,因为该文件非常庞大,绘制所有内容似乎毫无意义。因此,我建议采取以下措施:

pl 'fl1.dat' u 1:2 every 10

这将仅绘制每10个点,但如果有太多的点间距非常细,则仍然可以很好地显示图的全局行为。请记住,这不会连接各个点。如果您仍然想要连续的线条,请建议创建另一个数据文件,其中包含每10个文件,然后像往常一样使用线条绘制它。


1
另外需要注意的是输出终端的选择会对内存消耗产生巨大影响:交互式窗口或矢量格式会消耗更多的内存(我猜测这是因为这些格式跟踪了每个数据点,虽然正如Peaceful所强调的,你可能并不需要所有这些点)。因此,减少内存消耗的快速方法可能是将输出终端设置为适当大小的png,例如:
set terminal png size 1000,1000
set output "mygraph.png"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接