2012-04-23 871 views
2

我有一組數據,其中包含x和y座標以及每個座標的計算值。網格是不規則的,所以現在我已經創建了一個散點圖,並將這些值分隔爲一個輪廓,以顯示在下面鏈接上的img上。 http://i.stack.imgur.com/m7XHm.png帶有空白區域的Matplotlib輪廓

我想通過使用meshgrid使用matplotlib中的imshow/contour功能來優化此方法,然後插值計算出的值。我可以很好地工作,但最終會出現一個問題,它會丟失圖像中沒有數據(真實生活中的空白)的區域,並將它們連接起來,如下面鏈接上的圖像所示,以獲取相同的數據。 http://i.stack.imgur.com/ZCRog.png

我試圖找到最好的方法來做到這一點,但我還沒有找到任何幫助。有沒有人有建議?

我想我需要修改meshgrid階段的方法,但我不確定這一點。對於它的價值我的代碼是低於

x=nodalData[:,1] #array of x values from input file 
    y=nodalData[:,2] #array of y values from input file 

    #define the linear grid 
    xi, yi = np.linspace(x.min(), x.max(), 100), np.linspace(y.min(), y.max(), 100) 
    xi, yi = np.meshgrid(xi, yi) 

    z=Rres #array calculated elsewhere corresponding to x,y pair 

    #interpolate 
    zi = scipy.interpolate.griddata((x, y), z, (xi, yi), method='cubic') 
    #plot  
    plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower', extent=[x.min(), x.max(), y.min(), y.max()]) 
+0

你想**面具**一些地區,對吧? 檢查此[示例](http://matplotlib.sourceforge.net/examples/pylab_examples/contourf_demo.html)... – carla 2012-04-23 18:03:19

+0

問題是,掩碼區域的位置根據輸入而改變。理想情況下,如果可能的話,我希望網格上的輪廓不包含數據空白。 – LCSA 2012-04-23 22:12:33

回答

0

它是一個奇怪的問題,因爲插值的目的是爲數據不足的區域找到合理的估計值。我會建議要麼接受新的情節有內插值,所以它確定如果'沒有數據'區域不再存在。或者,您可以在執行插值之後將data voids重新插入,例如將第一個圖作爲掩碼。

+0

我試圖實現的是更好的可視化數據,我認爲這是通過等值線圖實現的。這些數據代表了建築物的樓板,因此有些地區沒有鋪設地板 - 插入這些地方會產生誤導。從我所知道的掩蔽這將是困難的空洞地區是不同的在每種情況下,所以我希望不要依靠掩護後插值。相反,我想知道是否有可能將空隙添加到原始網格中? – LCSA 2012-04-23 22:16:25

+0

@LCSA - 看起來你可以避免插入這些區域,將它們從你的xi,yi'數據點中排除(即排除它們,進行插值,將原始點返回)。此外,我認爲上面評論中發佈的鏈接可能允許您在插值之前隱藏,這可能是一種不同的方式(儘管我發現scipy過去不尊重裸體面具,所以我不確定)。 – fraxel 2012-04-24 07:46:31