Matplotlib - сгладить линию - PullRequest
       1

Matplotlib - сгладить линию

0 голосов
/ 27 февраля 2019

Я ищу совет о том, как сгладить линию тренда.

Это код:

import pandas as pd
from numpy import random

#Generating the data frame
df = pd.DataFrame(data = random.randn(5,4), index = ['A','B','C','D','E'],
columns = ['W','X','Y','Z'])

df['W'] = ['10/01/2018 12:00:00','10/03/2018 13:00:00',
           '10/03/2018 12:30:00','10/04/2018 12:05:00',
           '10/08/2018 12:00:15']

pd.to_datetime(df['W'])

print(df.head()) 

#Plotting hte graph
fig, ax = plt.subplots()
df.plot(x="W", y="X", ax=ax, color='salmon', alpha=0.5, marker='o')
df.plot(x="W", y="Y", ax=ax, color='royalblue', alpha=0.4, marker='o')

Вот что я получаю:

enter image description here enter image description here

Я хотел бы получить плавную линию, что-то вроде этого: enter image description here

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать метод df.resample и df.interpolate, чтобы делать то, что вы хотите.

Во-первых, df.resample вычисляет время, в которое мы будем интерполировать.После этого мы можем продолжить и интерполировать.

import pandas as pd
from numpy import random
import matplotlib.pyplot as plt

#Generating the data frame
df = pd.DataFrame(data = random.randn(5,4), index = ['A','B','C','D','E'], 
                                          columns = ['W','X','Y','Z'])

df['W'] = pd.to_datetime(['10/01/2018 12:00:00','10/03/2018 13:00:00',
                           '10/03/2018 12:30:00','10/04/2018 12:05:00',
                           '10/08/2018 12:00:15'], infer_datetime_format=True)

#Plotting
fig, ax = plt.subplots(1, 1)
df.plot(x="W", y="X", ax=ax, color='salmon', alpha=0.5, marker='o')
df.plot(x="W", y="Y", ax=ax, color='royalblue', alpha=0.4, marker='o')

df = df.resample('T', on='W').mean()

df.interpolate(method='spline', order=3, inplace=True)

df.plot(y='X', alpha=0.5, ax=ax, legend=False)
df.plot(y='Y',  alpha=0.4, ax=ax, legend=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...