matplotlib 中的平滑贝塞尔等效绘图

smooth bezier equivalent plotting in matplotlib

我需要帮助在 matplotlib 中使用 plt.steps 函数绘制光谱。由于数据嘈杂,在 gnuplot 中我使用平滑贝塞尔选项来平滑。 matplotlib 中有类似的选项吗?样条曲线无法平滑所需级别的数据。这是一个示例数据集 https://drive.google.com/open?id=0B4shfFfM7MOqV2h3ZDA0RXlOa2M

我用 plt.steps(data[:,0],data[:,1]) 绘制了 log x 值。 剧情附后matplotlib image .如何使用 matplotlib 平滑整个数据。(我对 python 绘图很陌生)

一个普通的低通滤波器似乎很有效。根据需要调整 alpha。

#! /usr/bin/env python3


import matplotlib.pyplot as plt


def smooth(y, alpha=0.1):
    ret = []
    sm = y[0]  # smoothed value, a moving average
    for val in y:
        ret.append(sm)
        sm = alpha * val + (1 - alpha) * sm
    return ret


def plot(points):
    x = [a for a, b in points]
    y = [b for a, b in points]

    plt.subplot(211)
    plt.semilogx(x, y)

    plt.subplot(212)
    plt.semilogx(x, smooth(y))

    plt.savefig('/tmp/smoothed.png')


if __name__ == '__main__':
    plot([
        (0.25, 0.000),
        (0.35, 0.055),
        (0.45, 0.103),
        (0.55, 0.104),
        (0.65, 0.143),
        (0.75, 0.140),
        (0.85, 0.143),
        (0.95, 0.143),
        (1.05, 0.126),
        (1.15, 0.223),
        (1.25, 0.217),
        (1.35, 0.232),
        (1.45, 0.225),
        (1.55, 0.219),
        (1.65, 0.223),
        (1.75, 0.236),
        (1.85, 0.216),
        (1.95, 0.222),
        (2.05, 0.244),
        (2.15, 0.244),
        (2.25, 0.257),
        (2.35, 0.221),
        (2.45, 0.221),
        (2.55, 0.213),
        (2.65, 0.238),
        (2.75, 0.209),
        (2.85, 0.223),
        (2.95, 0.226),
        (3.05, 0.212),
        (3.15, 0.247),
        (3.25, 0.247),
        (3.35, 0.236),
        (3.45, 0.215),
        (3.55, 0.218),
        (3.65, 0.241),
        (3.75, 0.209),
        (3.85, 0.239),
        (3.95, 0.221),
        (4.05, 0.169),
        (4.15, 0.246),
        (4.25, 0.230),
        (4.35, 0.229),
        (4.45, 0.242),
        (4.55, 0.264),
        (4.65, 0.188),
        (4.75, 0.182),
        (4.85, 0.248),
        (4.95, 0.172),
        (5.05, 0.189),
        (5.15, 0.228),
        (5.25, 0.183),
        (5.35, 0.272),
        (5.45, 0.201),
        (5.55, 0.204),
        (5.65, 0.203),
        (5.75, 0.198),
        (5.85, 0.187),
        (5.95, 0.244),
        (6.05, 0.229),
        (6.15, 0.202),
        (6.25, 0.234),
        (6.35, 0.231),
        (6.45, 0.173),
        (6.55, 0.206),
        (6.65, 0.173),
        (6.75, 0.178),
        (6.85, 0.183),
        (6.95, 0.188),
        (7.05, 0.181),
        (7.15, 0.153),
        (7.25, 0.150),
        (7.35, 0.183),
        (7.45, 0.188),
        (7.55, 0.111),
        (7.65, 0.145),
        (7.75, 0.195),
        (7.85, 0.192),
        (7.95, 0.156),
        (8.05, 0.126),
        (8.15, 0.095),
        (8.25, 0.151),
        (8.35, 0.127),
        (8.45, 0.130),
        (8.55, 0.095),
        (8.65, 0.127),
        (8.75, 0.219),
        (8.85, 0.122),
        (8.95, 0.094),
        (9.05, 0.128),
        (9.15, 0.054),
        (9.25, 0.122),
        (9.35, 0.080),
        (9.45, 0.139),
        (9.55, 0.107),
        (9.65, 0.097),
        (9.75, 0.087),
        (9.85, 0.050),
        (9.95, 0.090),
        (10.05, 0.053),
        (10.15, 0.121),
        (10.25, 0.055),
        (10.35, 0.056),
        (10.45, 0.014),
        (10.55, 0.087),
        (10.65, 0.044),
        (10.75, 0.150),
        (10.85, 0.077),
        (10.95, 0.140),
        (11.05, 0.064),
        (11.15, 0.065),
        (11.25, 0.132),
        (11.35, 0.050),
        (11.45, 0.068),
        (11.55, 0.017),
        (11.65, 0.000),
        (11.75, 0.072),
        (11.85, 0.110),
        (11.95, 0.056),
        (12.05, 0.057),
        (12.15, 0.115),
        (12.25, 0.098),
        (12.35, 0.060),
        (12.45, 0.101),
        (12.55, 0.041),
        (12.65, 0.062),
        (12.75, 0.063),
        (12.85, 0.064),
        (12.95, 0.065),
        (13.05, 0.066),
        (13.15, 0.157),
        (13.25, 0.023),
        (13.35, 0.093),
        (13.45, 0.094),
        (13.55, 0.072),
        (13.65, 0.048),
        (13.75, 0.098),
        (13.85, 0.125),
        (13.95, 0.101),
        (14.05, 0.051),
        (14.15, 0.104),
        (14.25, 0.053),
        (14.35, 0.054),
        (14.45, 0.054),
        (14.55, 0.083),
        (14.65, 0.112),
        (14.75, 0.113),
        (14.85, 0.115),
        (14.95, 0.087),
        (15.05, 0.029),
        (15.15, 0.000),
        (15.25, 0.091),
        (15.35, 0.031),
        (15.45, 0.124),
        (15.55, 0.031),
        (15.65, 0.032),
        (15.75, 0.065),
        (15.85, 0.033),
        (15.95, 0.033),
        (16.05, 0.000),
        (16.15, 0.068),
        (16.25, 0.000),
        (16.35, 0.070),
        (16.45, 0.141),
        (16.55, 0.143),
        (16.65, 0.072),
        (16.75, 0.073),
        (16.85, 0.000),
        (16.95, 0.037),
        (17.05, 0.113),
        (17.15, 0.077),
        (17.25, 0.039),
        (17.35, 0.078),
        (17.45, 0.079),
        (17.55, 0.040),
        (17.65, 0.041),
        (17.75, 0.082),
        (17.85, 0.041),
        (17.95, 0.042),
        (18.05, 0.042),
        (18.15, 0.043),
        (18.25, 0.043),
        (18.35, 0.000),
        (18.45, 0.133),
        (18.55, 0.134),
        (18.65, 0.045),
        (18.75, 0.091),
        (18.85, 0.046),
        (18.95, 0.093),
        (19.05, 0.236),
        (19.15, 0.048),
        (19.25, 0.145),
        (19.35, 0.049),
        (19.45, 0.000),
        (19.55, 0.050),
        (19.65, 0.000),
        (19.75, 0.101),
        (19.85, 0.205),
        (19.95, 0.155),
        (20.05, 0.052),
        (20.250, 0.034),
        (21.750, 0.029),
        (23.250, 0.036),
        (24.750, 0.033),
        (26.250, 0.048),
        (27.750, 0.051),
        (29.250, 0.033),
        (30.750, 0.033),
        (32.250, 0.089),
        (33.750, 0.084),
        (35.250, 0.068),
        (36.750, 0.089),
        (38.250, 0.017),
        (39.750, 0.049),
        (41.250, 0.093),
        (42.750, 0.043),
        (44.250, 0.069),
        (45.750, 0.049),
        (47.250, 0.096),
        (48.750, 0.065),
        (50.250, 0.098),
        (51.750, 0.042),
        (53.250, 0.088),
        (54.750, 0.105),
        (56.250, 0.074),
        (57.750, 0.065),
        (59.250, 0.096),
        (60.750, 0.129),
        (62.250, 0.075),
        (63.750, 0.142),
        (65.250, 0.116),
        (66.750, 0.035),
        (68.250, 0.091),
        (69.750, 0.170),
        (71.250, 0.119),
        (72.750, 0.082),
        (74.250, 0.086),
        (75.750, 0.223),
        (77.250, 0.163),
        (78.750, 0.097),
        (80.250, 0.175),
        (81.750, 0.182),
        (83.250, 0.108),
        (84.750, 0.196),
        (86.250, 0.145),
        (87.750, 0.090),
        (89.250, 0.372),
        (90.750, 0.224),
        (92.250, 0.132),
        (93.750, 0.171),
        (95.250, 0.141),
        (96.750, 0.146),
        (98.250, 0.225),
        (99.750, 0.503),
        (101.250, 0.199),
        (102.750, 0.123),
        (104.250, 0.169),
        (105.750, 0.174),
        (107.250, 0.224),
        (108.750, 0.368),
        (110.250, 0.284),
        (111.750, 0.243),
        (113.250, 0.150),
        (114.750, 0.256),
        (116.250, 0.263),
        (117.750, 0.540),
        (119.250, 0.332),
        (120.750, 0.567),
        (122.250, 0.407),
        (123.750, 0.477),
        (125.250, 0.122),
        (126.750, 0.313),
        (128.250, 0.384),
        (129.750, 0.328),
        (131.250, 0.335),
        (132.750, 0.411),
        (134.250, 0.351),
        (135.750, 0.574),
        (137.250, 0.367),
        (138.750, 0.150),
        (140.250, 0.536),
        (141.750, 0.391),
        (143.250, 0.479),
        (144.750, 0.489),
        (146.250, 0.333),
        (147.750, 0.510),
        (149.250, 0.520),
        (150.750, 0.796),
        (152.250, 0.090),
        (153.750, 0.092),
        (155.250, 0.563),
        (156.750, 0.478),
        (158.250, 0.487),
        (159.750, 0.298),
        (161.250, 0.405),
        (162.750, 0.206),
        (164.250, 0.735),
        (165.750, 0.428),
        (167.250, 0.653),
        (168.750, 0.332),
        (170.250, 0.113),
        (171.750, 0.459),
        (173.250, 0.117),
        ])