当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – GNUPLOT:缓慢绘制大量数据

来源:互联网 收集:自由互联 发布时间:2021-06-22
我试图用一个大文本文件制作一个“动画”图,其中包含以下脚本的大量数据(1000个粒子的位置): set terminal wxt size 1000,600k=999999N = 999do for [i=0:k]{plot for [j=0:N-1] "pos.txt" using 2*j+1:2*j+2 every
我试图用一个大文本文件制作一个“动画”图,其中包含以下脚本的大量数据(1000个粒子的位置):

set terminal wxt size 1000,600
k=999999
N = 999
do for [i=0:k]{
plot for [j=0:N-1] "pos.txt" using 2*j+1:2*j+2  every ::2*i+1::2*i+1 ls 1 pt 7 ps 2 notitle

在文件中,每一行在我想要绘制的点的特定时间都有坐标X和Y.我正在使用每一个来绘制每行中的所有数据,然后继续前进到下一行.

输出是这样的(1000颗粒移动)

然而,绘图太慢了,我不知道我能做些什么来让它更快地绘制.它每5秒或更长时间绘一行一次.该文件加权一些MB.我应该更换终端吗?还是我存储数据的方式?我认为当gnuplot加载一个大文件时可能会出现问题.
一些粒子在模拟中消失,所以我也得到错误线14:警告:当索引j(井2j 1)超过粒子数时跳过没有有效点的数据文件但是我试图使它读取数字每次都是粒子,甚至更慢.非常感谢.

我怀疑gnuplot每次绘制时都会读取整个文件,与读取相关行相反,然后是下一行,然后是下一行等.一种可能的策略是将粒子轨迹分成不同的文件,但特别是它可以通过简单的绘图以及每个块的选择来帮助删除绘图,而不是选择粒子的列,而是在同一块中为粒子位置设置相同的时间步长.

现在您的数据看起来像这样:

x1 y1 x2 y2 x3 y3 # Time step 1
x1 y1 x2 y2 x3 y3 # Time step 2

并且gnuplot需要为每个时间步和粒子读取一次文件.如果您按如下方式构造文件(请注意块之间的一个空行):

# Time step 1
x1 y1
x2 y2
x3 y3

# Time step 2
x1 y1
x2 y2
x3 y3

然后你不需要绘图,只需通过在每个中插入一个额外的分号来选择包含所有粒子的相应块:

set terminal wxt size 1000,600
k=999999
#N = 999 you don't need this anymore!
do for [i=0:k] {
plot "pos.txt" every :::i::i
}

上面的代码读取每个时间步的文件,而不是每个时间步和粒子,并一次绘制所有粒子.

网友评论