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

2024-06-09 14:50:44 发布

您现在位置:Python中文网/ 问答频道 /正文

导入matplotlib.pyplot文件作为plt 将numpy作为np导入 导入系统 从插入导入样条曲线

    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


Tags: numpylennpzerosdiffpltfloatfilename
1条回答
网友
1楼 · 发布于 2024-06-09 14:50:44

您可以通过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

相关问题 更多 >