我想平滑我的python matplotlib图,代码不起作用

时间:2018-06-07 21:06:27

标签: python numpy matplotlib scipy

将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()

My plot is pointy at the edges

我尝试使用splrev,splrep,但结不是非减少的, dydx经常高于和低于零,所以不能使用。 我在YouTube视频中看到了这个技术,它对他有用,但不适合我 https://www.youtube.com/watch?v=uSB8UBrbMfk

您可以从https://pastebin.com/44Kn2sm5

获取我的输入数据

1 个答案:

答案 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()

enter image description here