2014-10-27 43 views
1

這裏有點棘手的情況。基本上,我有大約6個x,y,z點的文件(每個點都有200個點),這些文件都是相互關聯的。我期望做的是製作一個這種數據的3D(splot),我已經可以做到這一點,只能使用相應行之間的行 - 所以文件1中的第34行與文件2中的第34行相同,等等。Intrafilular線繪圖?

我可以告訴我可能不會在這裏解釋它最好的,所以我會嘗試給出一些上下文。這是一個模擬程序,它可以計算粒子的位置,然後對它們施加不同的力。在每一秒的模擬之後,它會輸出一個文件,因此它會用線條繪製這些粒子在3D中的路徑。

爲了解決這個問題,我已經想過給每個粒子自己的文件,但因爲我必須加載每個文件(splot'file.csv'等),每次這將是相當慢 - 並會增加文件IO需要。任何幫助將非常感激。

謝謝!

回答

3

這實際上使用with vectors繪圖風格和paste命令相對容易。想象一下,你有以下四個文件:

# File 1 named data1 
0 0 0 
1 1 1 

# File 2 named data2 
1 0 0 
1 2 2 

# File 3 named data3 
1 1 0 
1 3 2 

# File 4 named data4 
1 0 2 
2 1 2 

粒子1將遵循軌跡0 0 0 -> 1 0 0 -> 1 1 0 -> 1 0 2和顆粒2瓦特不符合軌跡1 1 1 -> 1 2 2 -> 1 3 2 -> 2 1 2

with vectors樣式加入了兩點,爲此需要六個3D數據點,並且需要在同一個文件中。這可以通過使用paste命令來實現:

paste data1 data2 > data1-2 

導致文件data1-2看起來像這樣:

# File 1 named data1 # File 2 named data2 
0 0 0 1 0 0 
1 1 1 1 2 2 

但是這僅僅是解釋發生了什麼事情。這是更好的gnuplot內完成,與i遍歷文件和j循環訪問顆粒(與j = 0是第一個粒子):

nfiles = 4 # number of files 
nparticles = 2 # number of particles 

splot for [i=1:1] for [j=0:nparticles-1] "< paste data".i." data".(i+1) \ 
u 1:2:3:($4-$1):($5-$2):($6-$3) every ::j::j w vectors lc j+1 t "Particle ".(j+1), \ 
for [i=2:nfiles-1] for [j=0:nparticles-1] "< paste data".i." data".(i+1) \ 
u 1:2:3:($4-$1):($5-$2):($6-$3) every ::j::j w vectors lc j+1 not 

鉭大新!

enter image description here

+0

Perfecto!謝謝您的幫助! – user1150512 2014-10-28 11:33:11