2014-07-21 133 views
0

我正在創建一個程序,該程序使用有限差分方法解決3D偏微分方程。令人驚訝的是,這不是困難的部分,並且在技術上完成。部分DiffEQ解決方案的GNUPlot 3D強度圖

在節目的最後,我在下面的格式某些文件寫入數值解的PDE(用於後續處理)

X Y Z C 
0 0 0 0.1 
0 0 1 etc etc 

其中XY和Z空間座標和C是在每個位置的強度。

我找到了很多繪製3D空間尺寸和1強度的3D數據的信息。所以「技術上」我有4D數據...... 3個空間,1個強度。

的一條信息,我發現使用這個命令: splot「數據文件」 U 1:2:3:4瓦特pm3d

哪些可以完成任務,但因爲它是一個長方體,你不容易看到棱鏡中心的濃度。

我想象得到做到這一點的最佳方法是從矩形棱鏡中取出一塊「塊」,以便您可以看到強度層。我能想到的最好的比喻是,教科書是如何代表地球的各個層面的,他們把地球的一部分展現給核心。

我在研究論文中看到的另一種方法是在同一個圖上繪製和XY橫截面,YZ橫截面和XZ橫截面。

我試圖尋找這兩者,但它很難(對我來說)簡潔明瞭。

任何建議將是最好的方式來表示這些數據!

回答

0

我總是發現彩色地圖在解釋數據時最有幫助。你基本上通過明智的信息來繪製切片。如果您有網格數據,即使沒有預處理數據文件,這在gnuplot中也很容易實現。舉例來說,如果你的數據是這樣的:

# x y z c 
    0 0 0 0.15 
    1 0 0 0.14 
    2 0 0 0.16 

    0 1 0 0.11 
    1 1 0 0.19 
    2 1 0 0.12 

    0 2 0 0.15 
    1 2 0 0.19 
    2 2 0 0.13 

    0 0 1 0.10 
    1 0 1 0.09 
    2 0 1 0.17 

# etc 

那麼你可以用gnuplot的條件情節爲X,Y或Z固定值。對於z = 0平面,這可以通過splot "data" u 1:2:($3 == 0 ? $4 : 1/0)來實現,也就是說,如果第3列的值爲0,則繪製第4列的值,否則忽略該點。對於上面的簡單的例子:

set pm3d map 
splot "data" u 1:2:($3 == 0 ? $4 : 1/0) 

enter image description here

注意pm3d確實的數據點之間的一些內插。

如果進行預處理的數據,或者有它很好的結構類似於我的例子,你也可以使用with image style,這可能是優於pm3d有幾個原因,其中包括更小的文件大小:

plot "data" u 1:2:4 every :::0::2 with image 

enter image description here

哪裏沒有插值,但實際的點值。every :::0::2以上選定的數據塊0到2,這是我的例子中屬於z = 0的數據塊。

最後,如果您的數據是非網格的,則不能使用with image,而應該使用pm3d。在這種情況下,命令應該考慮與您想要繪製的平面相距可接受距離的點。這可以通過如下方式實現:

set pm3d map 
plane_z = 0 
splot "data" u 1:2:(abs($3 - plane_z) < 0.1 ? $4 : 1/0) 

在上面,我包括了所有陰謀其Z值小於從平面(Z = 0)我有興趣的距離0.1遠點