我试图用一个大文本文件制作一个“动画”图,其中包含以下脚本的大量数据(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
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)超过粒子数时跳过没有有效点的数据文件但是我试图使它读取数字每次都是粒子,甚至更慢.非常感谢.
现在您的数据看起来像这样:
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 }
上面的代码读取每个时间步的文件,而不是每个时间步和粒子,并一次绘制所有粒子.