【发布时间】:2022-01-16 19:23:40
【问题描述】:
我有一组测量点,我想在它们之间进行插值,为此我使用 SciPy 的 griddata():
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.interpolate import griddata
data = pd.DataFrame({
'time': [0, 1, 2, 3, 4, 0.1, 0.9, 2, 3.05, 4, 0, 1, 2.2, 3, 3.95],
'force': [1, 2, 4, 9, 16, 0, 0, 0, 0, 0, -1, -2, -4, -9, -16]
})
Times, Forces = np.meshgrid(
np.linspace(0, 4, 100),
np.linspace(-16, 16, 100)
)
data['work'] = data['time'] * data['force']
interpolation = griddata(
(data['time'], data['force']),
data['work'],
(Times, Forces),
method= 'linear'
)
fig, ax = plt.subplots()
contour = ax.contourf(
Times, Forces, interpolation
)
ax.scatter(data['time'], data['force'])
fig.show()
我的问题是,我的测量点已经遵循物理可能性的边界,但是插值仍然会针对每个可跨区域进行插值,包括那些无法测量的区域。
如何将插值或至少插值图限制在外部点的形状“范围内”?不幸的是,“时间”测量值有小的偏差。
任何建议将不胜感激!
【问题讨论】:
-
你试过
ax.tricontourf(data['time'], data['force'], data['work'],...)吗?这将使用给定坐标的凸包的三角剖分。 -
@JohanC 我没有,但恐怕它也有同样的问题。但无论如何我可能会使用它,因为它是我迄今为止所写的更优雅的版本,所以绝对感谢你! :) 但也许我可以创建一个可以覆盖出界区域的面具......
-
它可能会在
work值np.nan的边界区域中添加点。
标签: python matplotlib scipy interpolation