我有一个沿x轴的粒子位置的文本文件,该文件在每次碰撞后都会改变。示例数据。
0 7.5 10 30 30 40
0 9.375 10 32.5 40 40
0 10 10 33.3333 36.6667 40
0 10.25 10.75 34 34 40
0 11.0938 13.2812 28.75 40 40
我目前正在尝试使用gnu plot绘制数据。我想要做的是沿x轴放置这些点,但是我不想一次绘制整个文件,而是希望gnu图一次绘制一行。此外,因此数据是可识别的,我试图将这些点绘制成大的标记而不是点。我正在努力做到这一点,任何帮助将不胜感激。
我认为您不必使用来转置数据awk
,因为每一行已经包含单个粒子的数据。
因此,基于DragonHu的代码,我有以下内容:
为了生成该图,我还添加了连接点的线。另外,我使用了特殊的列号0,它仅给出了数据文件中的行号,从0开始。
另一个技巧:使用反斜杠\
,您可以将命令拆分为多行。这是我使用的绘图命令:
plot "particle.dat" using 1:0 with points linetype 1 pointtype 7 pointsize 3 title "particle 1",\
"" u 1:0 notitle w l lt 1,\
"" u 2:0 w p lt 2 pt 7 ps 3 t "particle 2", \
"" u 2:0 notitle w l lt 2,\
"" u 3:0 w p lt 3 pt 7 ps 3 t "particle 3", \
"" u 3:0 notitle w l lt 3,\
"" u 4:0 w p lt 4 pt 7 ps 3 t "particle 4", \
"" u 4:0 notitle w l lt 4,\
"" u 5:0 w p lt 5 pt 7 ps 3 t "particle 5",\
"" u 5:0 notitle w l lt 5
不过,这还不是答案,因为问题是一次绘制一组点。这可以通过以下代码来实现。它生成了五个单独的图,我将其转储到动画gif图中:
set key center
set yrange[0:1]
set xrange[0:40]
set terminal gif size 600, 200 animate delay 100
set output "animated.gif"
do for [n=0:4] {
set title sprintf("Lineno. %d", n)
plot "particle.dat" every ::n::n using 1:(0) with points pointtype 7 pointsize 3 title "particle 1",\
"" every ::n::n u 2:(0) w p pt 7 ps 3 t "particle 2", \
"" every ::n::n u 3:(0) w p pt 7 ps 3 t "particle 3", \
"" every ::n::n u 4:(0) w p pt 7 ps 3 t "particle 4", \
"" every ::n::n u 5:(0) w p pt 7 ps 3 t "particle 5",\
}
unset output
如果应创建单个图像,则可以通过
set terminal ongcairo
do for [n=0:4] {
set title sprintf("Lineno. %d", n)
set output sprintf("PictureNumber_%d",n)
plot ...
unset output
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句