Python 插值一维非功能数据点
我很难找到数据点的插值。这条线应该稍微像一个负的反二次曲线(即像一个向后的“c”) 因为这不是一个函数(x可以有多个y值),所以我不确定使用什么插值 我在想,也许我应该翻转轴来创建插值点/线,使用类似于单变量样条线的东西,然后在绘图时翻转它 这是一张仅包含各个点的图表: 这是我的密码: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
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)