我有一个散乱网格上的三维有限元计算结果。我想用python在一个水平面上插值这些数据,并使用matplotlib在那个平面上绘制结果的等高线。输出文件results.dat包含6列,即x、y、z坐标和三个位移分量。我对第三部分感兴趣。我想在一个100 x 100的矩形网格上进行插值,网格跨度从(-50,10)到(50,110),位置为z=-5。我想过以下几种可能性:
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
发布于 2017-11-29 17:48:08
经过反复试验,我终于发现,为了得到我想要的结果,我必须这样做:
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情况下唯一的选择。
https://stackoverflow.com/questions/47558392
复制相似问题