¿Cómo representar datos en un gráfico usando matplotlib plt.plot (df) suavizando las curvas?

Oct 16 2020

esta es mi pregunta, alguien puede ayudar

la segunda imagen es mi pregunta y la primera imagen es lo que pude al día con el siguiente código. ¿Cómo puedo trazar un gráfico usando matplotlib como en la pregunta?

enter code here

import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import pandas as pd

maxi = [39, 41, 43, 47, 49, 51, 45, 38, 37, 29, 27, 25]
mini = [21, 23, 27, 28, 32, 35, 31, 28, 21, 19, 17, 18]
index=[i for i in range(0,len(maxi))]
list=[]
for i in range(0,len(maxi)):
   l=[]
   l.append(maxi[i])
   l.append(mini[i])
   l.append(index[i])
   list.append(l)

df=pd.DataFrame(list,columns=['maxi','mini','index'])
data=[tuple(df['maxi']),tuple(df['mini'])]


l=[]
for i in range(0,len(df.columns)-1):
   l.append(df.columns[i])


color=['r','b']
j=0
for y in l:
   plt.scatter(data=df,x='index', y=y, color=color[j])
   plt.plot(df[l[j]],color=color[j])
   j=j+1

Respuestas

1 vestland Oct 16 2020 at 21:45

Si está dispuesto a usar plotly, puede configurar fácilmente una figura usando go.Figure()y go.Scatter(), y luego establecer line = dict(shape='spline', smoothing= <factor>)dónde <factor>está un número entre 0 and 1.3. En los documentos también puede ver que deberá configurar shape='spline'para que esto surta efecto:

suavizado:

Padre: datos [tipo = dispersión] .line Tipo: número entre o igual a 0 y 1.3 Predeterminado: 1 Tiene un efecto solo si shapese establece en "spline" Establece la cantidad de suavizado. "0" corresponde a ningún suavizado (equivalente a una forma "lineal").

Aquí tienes un ejemplo muy básico:

Código completo:

# imports
import pandas as pd
import plotly.graph_objs as go

# data
df = pd.DataFrame({'value1':[10,40,20,5],
                   'value2':[20,30,10,10]})

# plotly setup
fig = go.Figure()

# value 1 with smoothing = 1.3
fig.add_trace(go.Scatter(x=df.index, y = df['value1'],
                          line = dict(shape='spline', smoothing= 1.3)
                          )
               )

# value 2 with smoothing = 0.8
fig.add_trace(go.Scatter(x=df.index, y = df['value2'],
                          line = dict(shape='spline', smoothing= 0.8)
                          )
               )

fig.show()