Gnuplot 1d情节

时间:2014-11-23 02:26:58

标签: gnuplot

我有一个沿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绘图一次绘制一行。此外,所以数据是可识别的我试图将点绘制为大标记而不是点。我正在努力做到这一点,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先,使用AWK将行转换为列

awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=1;i<=NF;i++){for(j=1;j<=NR;j++)printf a[j,i]"\t";printf "\n"}}' original.dat > particle.dat
    #suppose that your input data is original.dat and the output data is particle.dat

转换后的数据为:

0   0   0   0   0   
7.5 9.375   10  10.25   11.0938 
10  10  10  10.75   13.2812 
30  32.5    33.3333 34  28.75   
30  40  36.6667 34  40  
40  40  40  40  40

然后,使用gnuplot中的以下代码绘制数据:

set border 1
    #`set border 1` means only showing the bottom border of the plot. see `help border` for more information
set xtics nomirror
    #only show the bottom tics on the x axis and suppress the upper tics of the x axis
unset ytics
    #suppress the tics on the y axis
set key outside
    #set the legend out side the plot
plot "particle.dat" using 1:(1) with points pointtype 7 pointsize 3 title "particle 1", "" u 2:(2) w p pt 7 ps 3 t "particle 2", "" u 3:(3) w p pt 7 ps 3 t "particle 3", "" u 4:(4) w p pt 7 ps 3 t "particle 4", "" u 5:(5) w p pt 7 ps 3 t "particle 5"
    #`using 1:(1)` means use the first column as X and a constant number of 1 as Y. see `help using` for more details
    #`u` is short for `using`and `w p pt 7 ps 3` is short for `with points pointtype 7 pointsize 3.

情节的输出是 enter image description here

答案 1 :(得分:1)

我不认为您必须使用awk转置数据,因为每行已包含单个粒子的数据。

所以,根据DragonHu的代码,我有这个: enter image description here

为了生成这个图,我还添加了连接点的线。另外,我使用了特殊的列号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


 }

enter image description here