代码之家  ›  专栏  ›  技术社区  ›  168grani

Matplotlib图形的线条平滑

  •  1
  • 168grani  · 技术社区  · 6 年前

    bullets' trajectory comparison

    我是python的新用户。我正在使用这个强大的代码进行科学研究和数据分析。

    我正在写我的物理学论文,我试图描述和分析子弹飞行背后的外部弹道。

    我正在使用matplotlib绘制表示子弹抛物线路径和相关交叉点的图形;考虑到这一点,我想知道是否有一种特殊的代码来平滑根据真实实验数据绘制的图形线,避免由许多直线段绘制图形。

    非常感谢你们所有人!

    弗朗西斯科

    1 回复  |  直到 4 年前
        1
  •  0
  •   el_Rinaldo    6 年前

    好的,弗朗西斯科,谢谢你上传图片。现在,让我们从编码中获得一些乐趣。

    首先,我建议使用numpy函数将一条多项式曲线拟合到一组值:np。polyfit()。请注意您设置的程度,因为结果可能会发生很大的变化。有关更多信息,请参阅以下文档: https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.polyfit.html

    然后,为了平滑曲线,需要增加点的数量,以使用np绘制函数。linspace()并使用此新集合应用 函数np。poly1d()(它根据使用polyfit进行的拟合计算y坐标)。

    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    x = [0, 50, 100, 150, 200, 250]
    
    y = [-1, 0.8, 1.9, 1.6, 0, -3]
    
    z = np.polyfit(x, y, 2)
    
    p = np.poly1d(z)
    
    xp = np.linspace(-2, 255)
    plt.plot(x, y, '.', xp, p(xp), '-')
    plt.show()
    

    enter image description here