Como traçar uma curva suave no matplotlib
Freqüentemente, você pode querer traçar uma curva suave no Matplotlib para um gráfico de linhas. Felizmente, isso é fácil de fazer usando as seguintes funções do SciPy:
Este tutorial explica como usar essas funções na prática.
Exemplo: traçando uma curva suave no Matplotlib
O código a seguir mostra como criar um gráfico de linhas simples para um conjunto de dados:
import numpy as np import matplotlib.pyplot as plt #create data x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) y = np.array([4, 9, 12, 30, 45, 88, 140, 230]) #create line chart plt. plot (x,y) plt. show ()
Observe que o gráfico de linhas não é completamente suave, pois os dados subjacentes não seguem uma linha suave. Podemos usar o seguinte código para criar uma curva suave para este conjunto de dados:
from scipy.interpolate import make_interp_spline, BSpline #createdata x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) y = np.array([4, 9, 12, 30, 45, 88, 140, 230]) #define x as 200 equally spaced values between the min and max of original x xnew = np. linspace ( x.min (), x.max (), 200 ) #define spline spl = make_interp_spline (x, y, k= 3 ) y_smooth = spl (xnew) #create smooth line chart plt. plot (xnew, y_smooth) plt. show ()
Observe que quanto maior o grau usado para o argumento k , mais “ondulada” será a curva. Por exemplo, considere o seguinte gráfico com k=7 :
from scipy.interpolate import make_interp_spline, BSpline #createdata x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) y = np.array([4, 9, 12, 30, 45, 88, 140, 230]) #define x as 200 equally spaced values between the min and max of original x xnew = np. linspace ( x.min (), x.max (), 200 ) #define spline with degree k=7 spl = make_interp_spline (x, y, k= 7 ) y_smooth = spl (xnew) #create smooth line chart plt. plot (xnew, y_smooth) plt. show ()
Dependendo da curvatura que você deseja que a linha tenha, você pode alterar o valor de k.
Recursos adicionais
Como mostrar linhas de grade em gráficos Matplotlib
Como remover carrapatos de gráficos Matplotlib
Como criar gráficos Matplotlib com escalas logarítmicas