Как построить гладкую кривую в Matplotlib?
Предварительное условие: Введение в Matplotlib
Часто у нас есть линейные графики, созданные из списков данных, которые довольно разбросаны, что делает графики похожими на прямые линии, соединяющие точки или довольно плотные, что приводит к тому, что точки данных находятся очень близко друг к другу, и, следовательно, график выглядит загроможденным.
Функция matplotlib.pyplot.plot () по умолчанию создает кривую, соединяя две соседние точки в данных прямой линией, и, следовательно, функция matplotlib.pyplot.plot () не создает плавную кривую для небольшого диапазона данных. точки.
Пример:
Python
import numpy as np import matplotlib.pyplot as plt # Dataset x = np.array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]) y = np.array([ 20 , 30 , 5 , 12 , 39 , 48 , 50 , 3 ]) # Plotting the Graph plt.plot(x, y) plt.title( "Curve plotted using the given points" ) plt.xlabel( "X" ) plt.ylabel( "Y" ) plt.show() |
Выход:
Обратите внимание, что график совсем не гладкий, поскольку базовые данные не следуют плавной линии. Чтобы построить гладкую кривую, мы сначала подгоняем кривую сплайна к кривой и используем кривую, чтобы найти значения y для значений x, разделенных бесконечно малым зазором. Мы можем получить гладкую кривую, построив эти точки с очень маленьким промежутком.
Мы можем использовать следующие методы, чтобы создать плавную кривую для этого набора данных:
1. Сглаживание кривой сплайна с помощью PyPlot:
Он строит гладкую сплайн-кривую, сначала определяя коэффициенты сплайн-кривой с помощью scipy.interpolate.make_interp_spline (). Мы используем заданные точки данных для оценки коэффициентов сплайновой кривой, а затем мы используем коэффициенты для определения значений y для очень близко расположенных значений x, чтобы кривая выглядела гладкой. Здесь мы будем использовать метод np.linspace (), который возвращает равномерно распределенные выборки, рассчитанные за указанный интервал. Необязательный параметр num - это количество выборок, которые необходимо сгенерировать в пределах диапазона start и stop. Значение по умолчанию - 50 и должно быть неотрицательным. Мы хотим, чтобы этот параметр имел достаточно высокое значение для создания плавной кривой. Давайте возьмем 500 равноотстоящих отсчетов между минимальным и максимальным значениями по оси X, чтобы построить кривую.
Syntax:
numpy.linspace(start, stop, num = 50, endpoint = True, retstep = False, dtype = None, axis = 0)
X_Y_Spline = scipy.interpolate.make_interp_spline(x, y)
Пример:
Python
import numpy as np import numpy as np from scipy.interpolate import make_interp_spline import matplotlib.pyplot as plt # Dataset x = np.array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]) y = np.array([ 20 , 30 , 5 , 12 , 39 , 48 , 50 , 3 ]) X_Y_Spline = make_interp_spline(x, y) # Returns evenly spaced numbers # over a specified interval. X_ = np.linspace(x. min (), x. max (), 500 ) Y_ = X_Y_Spline(X_) # Plotting the Graph plt.plot(X_, Y_) plt.title( "Plot Smooth Curve Using the scipy.interpolate.make_interp_spline() Class" ) plt.xlabel( "X" ) plt.ylabel( "Y" ) plt.show() |
Выход:
2. Сплайн-кривая с использованием кубической интерполяции
Он генерирует кривую кубической интерполяции с использованием класса scipy.interpolate.interp1d, а затем мы используем кривую для определения значений y для близко расположенных значений x для гладкой кривой. Здесь также мы будем использовать метод np.linspace (), который возвращает равномерно распределенные выборки, рассчитанные за указанный интервал. Давайте возьмем 500 равноотстоящих отсчетов между минимальным и максимальным значениями по оси X, чтобы построить кривую. В зависимости от того, насколько изогнутой должна быть линия, вы можете изменить значение третьего (num) параметра.
Syntax:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
cubic_interploation_model=scipy.interpolate.interp1d(x,y,kind=”cubic”)
Пример:
Python
import numpy as np from scipy.interpolate import interp1d import matplotlib.pyplot as plt # Dataset x = np.array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]) y = np.array([ 20 , 30 , 5 , 12 , 39 , 48 , 50 , 3 ]) cubic_interploation_model = interp1d(x, y, kind = "cubic" ) # Plotting the Graph X_ = np.linspace(x. min (), x. max (), 500 ) Y_ = cubic_interploation_model(X_) plt.plot(X_, Y_) plt.title( "Plot Smooth Curve Using the scipy.interpolate.interp1d Class" ) plt.xlabel( "X" ) plt.ylabel( "Y" ) plt.show() |
Выход:
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.