Eu tenho o seguinte script simples que traça um gráfico:
import matplotlib.pyplot as plt
import numpy as np
T = np.array([6, 7, 8, 9, 10, 11, 12])
power = np.array([1.53E+03, 5.92E+02, 2.04E+02, 7.24E+01, 2.72E+01, 1.10E+01, 4.70E+00])
plt.plot(T,power)
plt.show()
Do jeito que está agora, a linha vai direto de um ponto a outro, o que parece bom, mas poderia ser melhor na minha opinião. O que eu quero é suavizar a linha entre os pontos. No Gnuplot, eu teria planejado smooth cplines
.
Existe uma maneira fácil de fazer isso no PyPlot? Encontrei alguns tutoriais, mas todos parecem bastante complexos.
python
plot
matplotlib
curvesmoothing
Paulo
fonte
fonte
np.linspace
. Corrigido em minha resposta.spline
está obsoleto! spline está obsoleto no scipy 0.19.0, use a classe BSpline em vez disso:from scipy.interpolate import BSpline
Para este exemplo, o spline funciona bem, mas se a função não é inerentemente suave e você deseja ter uma versão suavizada, você também pode tentar:
se você aumentar o sigma, poderá obter uma função mais suavizada.
Prossiga com cuidado com este. Ele modifica os valores originais e pode não ser o que você deseja.
fonte
Presumo que você queira dizer ajuste de curva e não anti-aliasing do contexto de sua pergunta. PyPlot não tem nenhum suporte embutido para isso, mas você pode facilmente implementar alguns ajustes básicos de curva por conta própria, como o código visto aqui , ou se você estiver usando GuiQwt, ele tem um módulo de ajuste de curva . (Você provavelmente também pode roubar o código do SciPy para fazer isso).
fonte
rbf = Rbf(x, y), fi = rbf(xi)
foi a melhor entre elas. [1]: scipy-cookbook.readthedocs.io/items/RadialBasisFunctions.html ,Veja a
scipy.interpolate
documentação para alguns exemplos.fonte