2013-10-25 150 views
2

我想繪製使用gnuplot與FreeFEM ++獲得的數據。繪製FreeFEM ++數據到GNUPLOT

從FreeFEM我已用下面的代碼保存的數據:

{ ofstream ff("sol.dat"); 
    for (int i=0;i<Th.nt;i++){ 
      for (int j=0; j<3; j++){ 
        ff<<Th[i][j].x << "\t" << Th[i][j].y << "\t" << u[][Vh(i,j)] << endl; 
      } 
      ff<<Th[i][0].x << "\t" << Th[i][0].y << "\t" << u[][Vh(i,0)] << "\n\n\n"; 
    } 

}

數據的第一行的樣品是:

0.635787 -0.0440338 0.0056924 
0.65234 -0.063181 0.00797757 
0.655369 -0.0412323 0.00795786 
0.635787 -0.0440338 0.0056924 


0.597634 -0.0376 3.06323e-33 
0.613904 -0.0585366 0.0030425 
0.616879 -0.0388107 0.0030295 
0.597634 -0.0376 3.06323e-33 

其中由於某種原因,其我不知道每個'pack'中有兩次重複的數據點。但這是他們如何告訴你在FreeFem手冊中做到的。顯然,GNUPLOT出於某種原因需要「數據包」之間的空格。

我試圖用gnuplot的腳本來繪製數據:

set pm3d at b 
set palette rgbformulae 30,31,32 
set hidden3d 
splot "sol.dat" with lines palette 

它繪製精細,但我認爲pm3d沒有做任何事情。我認爲pm3d會在劇情的底部包含熱量強度的彩色圖案。我也沒有找到用純色填充情節中的線條之間的間隙的方式。

OUTPUT SAMPLE

謝謝。

+1

你正在混合幾個東西(pm3d,hidden3d,線條調色板),看起來像你想要一個非常花哨的情節......你必須用*一個*行分開兩個數據塊才能使用pm3d。正確的語法是'set pm3d at b'。您需要兩次添加一個點,因爲'pm3d'使用四個點來創建一個具有一種顏色的矩形。一個'4x4'矩陣將產生'3x3'彩色矩形。你能用文字解釋你的情節應該是什麼樣子(如何顯示線條,表面如何?,pm3d只在底部?應該隱藏什麼等)。就像你所擁有的那樣,這些選項不適合在一起。 – Christoph

+0

@Christoph,謝謝。我修復了錯字,幷包含了我想要的更好的描述以及我得到的內容的圖像。 我不知道那些命令不兼容。 –

回答

1

一個答案,首先需要不同的可能性適當的解釋來組織數據:

  1. 空行分隔兩個不同的數據集。它們根本沒有連接,它們之間沒有畫線。在你的情況下,這是必需的,因爲gnuplot不支持你單一表面的網格類型。

  2. pm3d只能在單個數據集內工作,並且需要一個常規網格(請參閱pm3d demos)。兩行(等值線)的單個表面必須分開只有一個空行。

仍然有一個不規則的網格,其中pm3d無法處理。在gnuplot內部,您可以使用dgrid3d對輸入數據進行重新採樣以獲得一個規則的網格,並用pm3d對其進行繪圖。

dgrid3d影響一個splot命令的所有數據文件。所以你還需要multiplot來使用兩個splot命令。

下面的腳本顯示了它可以工作,但我沒有完整的數據集,不知道dgrid3d COPES有很多數據如何設置(見上文1),這僅僅是一個非常粗略的指南:

set multiplot 

set pm3d at b 
set dgrid3d 200,200 
unset key 
splot 'sol.dat' nosurface 

unset dgrid3d 
unset pm3d 
splot 'sol.dat' with lines palette 

unset multiplot 

這應該工作,但你可能需要調整dgrid3d電話。此外,可能還需要其他一些增強功能(僅繪製邊框,tics和colorbox一次等等)。)

+0

謝謝!工作很好。 –