在gnuplot中从一个非常大的文件中打印子图

在gnuplot中从一个非常大的文件中打印子图,plot,gnuplot,bigdata,Plot,Gnuplot,Bigdata,我有一个10GB的文件,有几十亿个条目。它有许多列。我想把每一列画成不同的子图。我使用了以下MWE: set datafile separator "," set terminal png set output "a.png" set multiplot layout 2,1 title "" plot "camkii.dat" using 1:2 with lines plot "camkii.dat" using 1:23 with lines 这个脚本需要几十秒。如您所见,我调用绘图“c

我有一个10GB的文件,有几十亿个条目。它有许多列。我想把每一列画成不同的子图。我使用了以下MWE:

set datafile separator ","
set terminal png
set output "a.png"
set multiplot layout 2,1 title ""
plot "camkii.dat" using 1:2 with lines
plot "camkii.dat" using 1:23 with lines
这个脚本需要几十秒。如您所见,我调用
绘图“camkii.dat”…
两次。我怀疑每次都会读取该文件。这不是很有效,我可能会耗尽内存

如果我可以将文件读入某个变量(比如
foo
),然后使用变量foo绘制每个子图。类似于
plot foo[1]…
plot foo[2]…
等的内容。这样,我只读取了一次文件


我怀疑gnuplot可能加载了两次文件,对吗。如果是,将文件保存到变量中并打印会有帮助吗?建议对MWE进行更改将非常好。

我想整个文件都已读取,但我不确定。如果您在Linux系统上,可以调用
awk
来提取所需的列(但第一列会再次读取两次)


绘图“不,不能缓存数据以在第二个绘图中重复使用。如果您在数据量方面遇到问题,可以尝试使用更有效的方式保存数据,如hdf5文件格式。然后,您可以使用例如
h5totext
仅提取所需的数据部分,而不读取整个文件。只是一个猜测,尚未对此进行基准测试现在
awk
必须读取文件两次。不确定这是否更好。可能更好,因为完整文件没有同时加载两次。。。但是,要获得更多的控制权,您应该看看其他工具(例如gnuplot.py或python的matplotlib),在那里您可以更好地控制内存的使用方式allocated@RaphaelRoth我已经在使用matplotlib了。不幸的是,使用matplotlib绘制数据需要更长的时间(除非我对数据进行采样)。
plot "<awk '{print $1 $2}' camkii.dat" with lines     
plot "<awk '{print $1 $23}' camkii.dat" with lines