2013-04-12 53 views
0

我計算多個粒子的迭代的位置,讓自己的輸出文件看起來像:gnuplot的:繪製多個對象的移動軌跡在獨立塊

x1(t=0) y1(t=0) 
x2(t=0) y2(t=0) 
... 
xn(t=0) yn(t=0) 

x1(t=1) y1(t=1) 
... 
xn(t=1) yn(t=1) 

(a lot of blocks) 

x1(t=p) y1(t=p) 
... 
xn(t=p) yn(t=p) 

例如,粒子1是上的每個第一線塊等

我需要繪製每個粒子的軌跡在一個圖中,點與線相連。我偶然發現的問題是正確鏈接對應於正確粒子的點。我發現一些建議重新格式化數據,但我不知道如何處理它。用繪圖命令直接繪製軌跡也是可能的,但是我又一次提出瞭解決方案。

回答

0

你應該能夠與一個循環做到這一點(在gnuplot的> = 4.6)和index選項繪圖命令:

p = (number of particles) 
plot for [i=0:p] 'data.dat' index i with linespoints 

with linespoints選項也聽起來像是你想要什麼,哪個環節帶線的數據點。

+0

實際上,我想在每個時間步中鏈接對應於粒子i的點。在這種情況下,'with linespoints'選項將鏈接來自同一個塊的點。 – FrenSH

+0

我明白了,我誤解了你的指數。 – andyras

0

不幸的是,你現在的數據文件設置沒有辦法做到這一點。你可以不連接使用everye)關鍵字點一個情節:

plot for [i=0:NPOINTS-1] 'test.dat' e ::i::i w p 

但是,這不是非常有幫助真的,如果你想要的數據集連接,你需要「反轉」您的數據。我會使用python因爲它是超級簡單:

#pythonscript.py 
import sys #allow us to get commandline arguments 

#store data as 
#[[x1(t=0) y1(t=0),x2(t=0) y2(t=0),x3(t=0) y3(t=0),...], 
# [x1(t=1) y1(t=2),x2(t=2) y2(t=2),x3(t=2) y3(t=2),...], 
# ... 
# [x1(t=N) y1(t=N),x2(t=N) y2(t=N),x3(t=N) y3(t=N),...], 
#] 

with open(sys.argv[1]) as fin: 
    data = [] 
    current = [] 
    data.append(current) 
    for line in fin: 
     line = line.rstrip() 
     if line: 
      current.append(line) 
     else: 
      current = [] 
      data.append(current) 


#now transpose the data an write it out. `zip(*data)` will give you: 
#[(x1(t=0) y1(t=0),x1(t=1) y1(t=1),x1(t=2) y3(t=2),...), 
# (x2(t=0) y2(t=0),x2(t=1) y2(t=1),x2(t=2) y2(t=2),...), 
# ... 
# (xN(t=0) yN(t=0),xN(t=1) yN(t=1),xN(t=2) yN(t=2),...), 
#] 
for lst in zip(*data): 
    for dpoint in lst: 
     print dpoint 
    print 

對於我來說,給定的輸入文件(test.dat):

x1(t=0) y1(t=0) 
x2(t=0) y2(t=0) 
xn(t=0) yn(t=0) 

x1(t=1) y1(t=1) 
x2(t=1) y2(t=1) 
xn(t=1) yn(t=1) 

x1(t=p) y1(t=p) 
x2(t=p) y2(t=p) 
xn(t=p) yn(t=p) 

運行python pythonscript.test.dat給出:

x1(t=0) y1(t=0) 
x1(t=1) y1(t=1) 
x1(t=p) y1(t=p) 

x2(t=0) y2(t=0) 
x2(t=1) y2(t=1) 
x2(t=p) y2(t=p) 

xn(t=0) yn(t=0) 
xn(t=1) yn(t=1) 
xn(t=p) yn(t=p) 

現在你可以繪製使用the solution by andyras

plot for [i=0:NP] '< python pythonscript.py data.dat' index i w lp 
+0

你的答案似乎不錯,但我還沒有成功繪圖。當輸入繪圖命令時,此: '警告:跳過沒有有效點的數據文件' 會引發(NP-1)次,並且他們還告訴我'x範圍無效'。 即使我沒有看到任何輸出(對不起,因爲不熟練而感到抱歉),python腳本似乎可以正常運行(沒有錯誤信息)。 – FrenSH

+0

如果從命令行(不帶gnuplot?)運行python腳本,會發生什麼情況。你看到任何數據輸出?有可能我在那裏搞砸了一些東西...... – mgilson

+0

從命令行,腳本沒有返回任何東西(沒有輸出顯示) – FrenSH