добавление линии регрессии в python с помощью matplotlib - PullRequest
1 голос
/ 30 марта 2020

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

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

enter image description here

Это ссылка на файл Excel: https://drive.google.com/file/d/12wD2ByQC6ObNCWq_yIhkXiNsV3KfDpit/view?usp=sharing

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# Graph in chronological order
heights = pd.read_excel ('Qinghai_dates_heights.xlsx')
dates = (heights.loc[:,'Date'])
strong_beams = (heights.loc[:,'Strong total'])
weak_beams = (heights.loc[:,'Weak total'])
total_beams = (heights.loc[:,'Total'])

# setting the reference data from Hydrolabs
reference_dates = (heights.loc[:,'Date.1'])
reference_heights = (heights.loc[:,'Hydrolabs'])

# Set the locator
locator = mdates.MonthLocator()  # every month
# Specify the format - %b gives us Jan, Feb...
fmt = mdates.DateFormatter('%b')


#plt.plot(dates,strong_beams, label='Strong Beams',  marker="o")
#plt.plot(dates,weak_beams, label='Weak Beams',  marker="o")
plt.plot(dates, total_beams, label='Total Beams',  marker="o")
plt.plot(reference_dates, reference_heights, label='Reference height (Hydrolabs)',  marker="o")



X = plt.gca().xaxis
X.set_major_locator(locator)
# Specify formatter
X.set_major_formatter(fmt)
plt.xlabel('Date [months]')
plt.ylabel('elevation [m]')
plt.title("Water-Height Qinghai from November 2018 - November 2019  ")
plt.legend()
plt.show()

1 Ответ

0 голосов
/ 30 марта 2020

Это помогает? Для этого я обычно использую sklearn.

import numpy as np
from matplotlib import pyplot as plt
from sklearn import linear_model, datasets

Генерация набора данных

X = np.linspace(0, 10)
line_X = X[:, np.newaxis]
Y = X + 0.2*np.random.normal(size=50)

Выберите модель регрессии (есть еще больше , в зависимости от ваших потребностей )

lr = linear_model.LinearRegression()

Здесь вы действительно подгоняете

lr.fit(line_X, Y)

Здесь вы извлекаете параметры, поскольку вам, кажется, это нужно;)

slope = lr.coef_[0]
intercept = lr.intercept_

И затем ваш сюжет

plt.plot(X, slope*X + intercept, ls='-', marker=' ')
plt.plot(X, Y)

plot of the data and the fit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...