将matplotlib.pyplot导入为plt 导入numpy为np 导入系统 来自scipy.interpolate import spline
filename = sys.argv[1]
I take data from a file, y=time,x=distance
load it into 2 numpy arrays x and y
x,y=np.loadtxt(filename, delimiter=',', unpack=True)
dydx=np.zeros([1,len(x)],dtype = float)
zero = np.array(np.zeros(5))
xdiff = np.array([0,len(x)-1],dtype = float)
ydiff = np.array([0,len(x)-1],dtype = float)
xdiff = np.diff(x)
ydiff = np.diff(y)
dydx = np.divide(np.diff(x),np.diff(y))
plt.ylabel("Velocity")
plt.xlabel("Time")
a = np.linspace(y[0],y[len(y)-1],len(y))
dydx = np.append(dydx, zero[0])
我得到的图表仍然很尖锐而且不顺畅
我这样做是为了使情节更顺畅,但仍然没有奏效 尖
a_smooth = np.linspace(a.min(),a.max(),len(y))
dydx_smooth = spline(a,dydx,a_smooth)
这是绘图的正常程序
plt.plot(a_smooth,dydx_smooth)
plt.grid()
plt.show()
我尝试使用splrev,splrep,但结不是非减少的, dydx经常高于和低于零,所以不能使用。 我在YouTube视频中看到了这个技术,它对他有用,但不适合我 https://www.youtube.com/watch?v=uSB8UBrbMfk
获取我的输入数据答案 0 :(得分:1)
您可以通过pandas
以非常简单方便的方式过滤数据。
我无法访问您的在线数据存储,因此我自己制作了一些示例数据,如果可以的话......
import pandas as pd
x = np.linspace(0,25000,1000)
y = np.sin(np.linspace(0,25*np.pi,1000))*(1.2+np.cos(np.arange(-200,800)/45/4/2))+np.random.random(1000)
df = pd.DataFrame({'y': y}, index=x)
plt.plot(df)
plt.plot(df, label='raw data')
plt.plot(df.rolling(10, Center=True).mean(), label='filtered by rolling mean size 10')
plt.legend()