簡體   English   中英

使用scipy和matplotlib插值和繪制分散的3D數據的輪廓

[英]Interpolating and plotting contours of scattered 3D data using scipy and matplotlib

我在分散的網格上進行了3D FEM計算的結果。 我想在水平面上使用python插值這些數據,並使用matplotlib在該平面上繪制結果的輪廓。 輸出文件results.dat包含6列,即x,y,z坐標和三個位移分量。 我對第三部分感興趣。 我想在從(-50,10)到(50,110)且位於z = -5的100 x 100矩形網格上進行插值。 我想到了以下可能性:

import numpy as np
from scipy.interpolate import grid data

res = np.loadtxt('results.dat')
points = res[:,0:3]
values = res[:,-1]
xi,yi,zi = np.mgrid[-50.:50.:101j,10.:100.:101j,-5:-5:1j]

gridres = griddata(points, values, (xi, yi, zi))

為了檢查結果是否正確,我應該能夠繪制輪廓,例如

plt.contour(xi,yi,griddata)

但我無法以plt.contour要求的格式處理xi,yi和griddata

通過反復試驗,我終於發現,為了獲得想要的結果,我必須這樣做:

import matplotlib.pyplot as plt

x_contour = np.mgrid[-50.:50.:101j]
y_contour = np.mgrid[10.:100.:101j]

plt.contourf(x_contour, y_contour, gridres[:,:,0].T)
plt.show()

如果有人能幫助我理解為什么會這樣,我將不勝感激! 還有其他建議的插值方法嗎? 如果可以使用除“線性”方法以外的任何更高階插值方法,這將是一種很好的選擇,這似乎是此3D情況的唯一選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM