我想平滑我的 python matplotlib 图,代码不起作用 [重复]

Posted

技术标签:

【中文标题】我想平滑我的 python matplotlib 图,代码不起作用 [重复]【英文标题】:I want to smoothen my python matplotlib plot, code not working [duplicate] 【发布时间】:2018-11-17 21:29:12 【问题描述】:

将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np 导入系统 从 scipy.interpolate 导入样条线

    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

你可以从这里https://pastebin.com/44Kn2sm5获取我的输入数据

【问题讨论】:

那段视频不是已经说明了为什么这不是一种好的平滑方法吗? (不知道为什么这个人制作了视频,展示了一个不太好的选择)无论如何这里有很多关于平滑的问题,所以我认为你宁愿看看这些并告诉他们在多大程度上没有工作.还提供问题的minimal reproducible example,人们可以运行。 @ImportanceOfBeingErnest 我添加了一个指向我的输入数据的链接。请运行代码。我看到了其他答案,但到目前为止它对我没有帮助,请帮助我 抱歉,但您的代码看起来很乱:np.zeros 已经返回一个 numpy 数组,为什么要转换为 np.array?与 xdiff 和 ydiff 的定义相同(在单个字符上没有区别......)然后你重新定义它们 - 然后你甚至不使用这些变量。然后你想“平滑”一些东西,而不是澄清你的意思。滚动均值滤波器?这与样条没有任何关系。你想让样条拟合吗?我猜不是...请让您的要求更清楚。 【参考方案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()

【讨论】:

伙计们,感谢您的贡献,但我使用了 Savitsky Golay 过滤器,效果非常好。你一定要试试。 @Rick Sanchez 如果您有如此出色的解决方案:不要只提及它 - 将其发布在此处,以便其他人也可以利用它。记住:***.com/help/self-answer 对不起,你是对的。我马上做 原来我没有足够的声誉,我无法回答我自己的问题。但是给你,docs.scipy.org/doc/scipy-0.16.1/reference/generated/…

以上是关于我想平滑我的 python matplotlib 图,代码不起作用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python matplotlib 绘制训练曲线 综合示例——平滑处理图题设置图例设置字体大小线条样式颜色设置

python matplotlib怎么在一张图上画多条曲线?Python处理多个csv文件生成叠加曲线图——综合示例:平滑处理图注图例图题范围缩放

在 matplotlib/python 中可视化高维数据

Python 图像处理 OpenCV :图像平滑(滤波)处理

Python 图像处理 OpenCV :图像平滑(滤波)处理

Python 图像处理 OpenCV :图像平滑(滤波)处理