Python 插值一维非功能数据点

Python 插值一维非功能数据点,python,matplotlib,scipy,interpolation,Python,Matplotlib,Scipy,Interpolation,我很难找到数据点的插值。这条线应该稍微像一个负的反二次曲线(即像一个向后的“c”) 因为这不是一个函数(x可以有多个y值),所以我不确定使用什么插值 我在想,也许我应该翻转轴来创建插值点/线,使用类似于单变量样条线的东西,然后在绘图时翻转它 这是一张仅包含各个点的图表: 这是我的密码: import datetime as dt import matplotlib.pyplot as plt from scipy import interpolate file = open_file("01

我很难找到数据点的插值。这条线应该稍微像一个负的反二次曲线(即像一个向后的“c”)

因为这不是一个函数(x可以有多个y值),所以我不确定使用什么插值

我在想,也许我应该翻转轴来创建插值点/线,使用类似于单变量样条线的东西,然后在绘图时翻转它

这是一张仅包含各个点的图表:

这是我的密码:

import datetime as dt
import matplotlib.pyplot as plt
from scipy import interpolate

file = open_file("010217.hdf5", mode = "a", title = 'Sondrestrom1')
all_data = file.getNode('/Data/Table Layout').read()
file.close()


time = all_data['ut1_unix'] #time in seconds since 1/1/1970
alt = all_data['gdalt'] #all altitude points
electronDens = all_data['nel'] #all electron density points
x = []
y = []
positions = []

for t in range(len(time)): #Looking at this specific time, find all the respective altitude and electron density points
    if time[t] == 982376726:
        x.append(electronDens[t])
        y.append(alt[t])
        positions.append(t)

#FINDING THE DATE        
datetime1970 = dt.datetime(1970,1,1,0,0,0)
seconds = long(time[t])
newDatetime = datetime1970 + dt.timedelta(0, seconds)        
time1 = newDatetime.strftime('%Y-%m-%d %H:%M:%S')
title = "Electron Density vs. Altitude at "
title += time1

plt.plot(x,y,"o")
plt.title(title)
plt.xlabel('Electron Density (log_10[Ne])')
plt.ylabel('Altitude (km)')
plt.show()
正如图表标题所说的“电子密度vs.Altidude”,我想在垂直轴上每个点只有一个值

这意味着您实际上正在查看一个已翻转的函数,以便使x轴垂直,因为垂直轴上的高度对人类来说更直观

看看你的代码,似乎有一个测量,在那里同时测量了高度和电子密度。因此,即使我上面的理论是错误的,你仍然应该能够在时域内插值所有东西,并从中创建样条曲线

。。。如果你真的想有一条曲线,精确地穿过每一点。 考虑到数据中存在多大的分散性,您可能应该进行曲线拟合,而不是完全复制每个测量值:
scipy.interpolate.Rbf
应该可以正常工作,同样,您应该切换轴,即计算电子密度作为海拔高度的函数。只需确保使用smooth=0.01或更高一点(0.0将精确地通过每个点,在嘈杂的数据上看起来有点傻)


。。。实际上,您的大部分问题似乎都是为了更好地理解数据:)

y值是否可以对应多个x值?您可以只翻转轴,或者使用参数样条曲线(tck,u=([x,y])。您是否可以修改它,以便显式输入x和y值,而不是逐字发布代码?这样我们就可以运行一个工作示例,并为您发布一个工作解决方案。此外,您还声明它不是一个函数,但很明显x(电子密度)是y(高度)的函数,因此使用样条曲线插值将非常简单,您可以使用scipy.interpolate.UnivariateSpline(y,x)