Сглаживание графика дает огромную разницу в диапазоне

Я пытаюсь построить гладкую кривую, используя вышеперечисленные х, у. Как бы то ни было, график, который я получаю, выходит за рамки моих данных. Фрагмент моего кода здесь.

import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import spline ylist = [0.36758563074352546, 0.27634194831013914, 0.22261484098939929, 0.10891089108910891, 0.31578947368421051, 0.086956521739130432, 0.27272727272727271, 0.18181818181818182, 0.0, 0.0, 0.92000000000000004, 0.0, 0.10526315789473684, 0.23333333333333334] xlist = [0.025000000000000001, 0.075000000000000011, 0.125, 0.17500000000000002, 0.22500000000000001, 0.27500000000000002, 0.32500000000000001, 0.375, 0.42500000000000004, 0.47500000000000003, 0.52500000000000002, 0.57500000000000007, 0.625, 0.97500000000000009] xlist_smooth = np.linspace(xlist.min(), xlist.max(), 100) ylist_smooth = spline(xlist, ylist, xlist_smooth) plt.plot(xlist_smooth,ylist_smooth) 

Я получаю следующую кривую как вывод plot_example

One Solution collect form web for “Сглаживание графика дает огромную разницу в диапазоне”

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

Ниже я построил сплайн-интерполяции порядка 0-3. Что вы видите, так это то, что как только вы потребуете непрерывности производной (порядок 2 и выше), вы столкнетесь с проблемами с двумя последними точками.

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

В зависимости от того, что вы хотите сделать здесь, подгонка кусочно-непрерывного сплайна (порядок = 1) может быть прекрасным для вас. В противном случае вам, вероятно, придется искать другую стратегию сглаживания.

 import numpy as np from scipy.interpolate import spline import matplotlib.pyplot as plt ylist = [0.36758563074352546, 0.27634194831013914, 0.22261484098939929, 0.10891089108910891, 0.31578947368421051, 0.086956521739130432, 0.27272727272727271, 0.18181818181818182, 0.0, 0.0, 0.92000000000000004, 0.0, 0.10526315789473684, 0.23333333333333334] xlist = [0.025000000000000001, 0.075000000000000011, 0.125, 0.17500000000000002, 0.22500000000000001, 0.27500000000000002, 0.32500000000000001, 0.375, 0.42500000000000004, 0.47500000000000003, 0.52500000000000002, 0.57500000000000007, 0.625, 0.97500000000000009] xlist_smooth = np.linspace(min(xlist), max(xlist), 100) fig, axes = plt.subplots(4,1, sharex=True) for order, ax in enumerate(axes): ylist_smooth = spline(xlist, ylist, xlist_smooth, order=order) ax.plot(xlist_smooth, ylist_smooth, label="spline order %s" % order) ax.scatter(xlist, ylist, label="knots") ax.set_ylim(min(xlist)-1,max(xlist)+1) ax.legend() не import numpy as np from scipy.interpolate import spline import matplotlib.pyplot as plt ylist = [0.36758563074352546, 0.27634194831013914, 0.22261484098939929, 0.10891089108910891, 0.31578947368421051, 0.086956521739130432, 0.27272727272727271, 0.18181818181818182, 0.0, 0.0, 0.92000000000000004, 0.0, 0.10526315789473684, 0.23333333333333334] xlist = [0.025000000000000001, 0.075000000000000011, 0.125, 0.17500000000000002, 0.22500000000000001, 0.27500000000000002, 0.32500000000000001, 0.375, 0.42500000000000004, 0.47500000000000003, 0.52500000000000002, 0.57500000000000007, 0.625, 0.97500000000000009] xlist_smooth = np.linspace(min(xlist), max(xlist), 100) fig, axes = plt.subplots(4,1, sharex=True) for order, ax in enumerate(axes): ylist_smooth = spline(xlist, ylist, xlist_smooth, order=order) ax.plot(xlist_smooth, ylist_smooth, label="spline order %s" % order) ax.scatter(xlist, ylist, label="knots") ax.set_ylim(min(xlist)-1,max(xlist)+1) ax.legend() 

введите описание изображения здесь

Python - лучший язык программирования в мире.