гладкая линия matplotlib: как я могу сгладить линию с 5 точками выборки? - PullRequest
0 голосов
/ 04 марта 2020

надеюсь, у вас все хорошо, у меня следующий вопрос:

предположим, у меня есть 2 списка со значениями x = mode, y = floor; у меня вопрос: как я могу соединить точки с помощью гладкой линии, используя всего 5 точек:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import savgol_filter
from scipy.optimize import curve_fit
from scipy import interpolate

mode=[0.0, -0.000906168, -0.000466564, 0.000320168, 0.000800825]
floor=[0, 3.2, 6.4, 9.6, 12.8]

plt.plot(mode1,floor,'green')
plt.plot(mode1,floor,'o')
plt.plot(np.repeat(0,len(floor)),floor,'o')
plt.plot(np.repeat(0,len(floor)),floor,'black')
plt.show()

зеленый график - это линия, которую я хотел бы получить плавно, я пытался подгонять все библиотеки, которые Вы видели в импорте, но они не приносят мне хорошего, пожалуйста, я ценю вашу помощь.

1 Ответ

1 голос
/ 04 марта 2020

Scipy's interpolate.interp1d с kind='cubic' или kind='quadratic' может использоваться для создания гладкой кривой. Квадратичная c кривая выглядит немного жестче, чем кубическая c. Обратите внимание, что в примере x и y обращены к тому, как они обычно рисуются.

Вот пример кода, демонстрирующий, как такая интерполяция может использоваться в вашей ситуации:

import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate

mode = [0.0, -0.000906168, -0.000466564, 0.000320168, 0.000800825]
floor = [0, 3.2, 6.4, 9.6, 12.8]

plt.plot(mode, floor, marker='o', markerfacecolor='dodgerblue', markeredgecolor='dodgerblue',
         linestyle='dotted', color='limegreen', linewidth=1)
plt.plot(np.zeros(len(floor)), floor, marker='o', markerfacecolor='orange', markeredgecolor='orange',
         linestyle='solid', color='purple')

smoothed_mode = interpolate.interp1d(floor, mode, 'cubic')
floor_range = np.linspace(min(floor), max(floor), 500)
plt.plot(smoothed_mode(floor_range), floor_range, ls='solid', color='crimson')

plt.show()

resulting plot

...