【问题标题】:Interpolating and plotting contours of scattered 3D data using scipy and matplotlib使用 scipy 和 matplotlib 插值和绘制分散的 3D 数据的轮廓
【发布时间】:2018-05-13 11:50:07
【问题描述】:

我有一个散布网格上的 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

【问题讨论】:

    标签: python matplotlib multidimensional-array interpolation contour


    【解决方案1】:

    经过反复试验,我终于发现,为了得到我想要的结果,我必须这样做:

    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 案例的唯一选择。

    【讨论】:

    • 我认为您在这里混淆了 x 和 y。
    • 你为什么这么说?我不这么认为
    • 当然我不知道你的数据。但是,如果您需要转置gridres,则表明 x 是 y,y 是 x。
    • griddata 可以根据需要进行三次插值。如需进一步帮助,您可能需要minimal reproducible example。只需发明一些数据并将其放入代码中即可。
    • 1) 我认为 x 和 y 的问题是 np.mgrid 在:xi,yi,zi = np.mgrid[-50.:50.:101j,10.:100.:101j,-5:-5:1j]x_contour = np.mgrid[-50.:50.:101j] y_contour = np.mgrid[10.:100.:101j] 之间的不同行为 2) 当然我阅读了 scipy 文档并尝试了三次插值但是蟒蛇抱怨:ValueError: Unknown interpolation method 'cubic' for 3 dimensional data
    猜你喜欢
    • 2013-08-21
    • 2016-05-28
    • 2013-09-19
    • 2021-07-03
    • 2019-03-24
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多