How to visualize a nonlinear relationship in a scatter plot
You could also use seaborn:
import numpy as np
import seaborn as sns
x = np.arange(0, 10, 0.01)
ytrue = np.exp(-x / 5) + 2 * np.sin(x / 3)
y = ytrue + np.random.normal(size=len(x))
sns.regplot(x, y, lowess=True)
From the lowess
documentation:
Definition: lowess(endog, exog, frac=0.6666666666666666, it=3, delta=0.0, is_sorted=False, missing='drop', return_sorted=True)
[...]
Parameters
----------
endog: 1-D numpy array
The y-values of the observed points
exog: 1-D numpy array
The x-values of the observed points
It accepts arguments in the other order. It also doesn't only return y
:
>>> lowess(y, x)
array([[ 0.00000000e+00, 1.13752478e+00],
[ 1.00000000e-02, 1.14087128e+00],
[ 2.00000000e-02, 1.14421582e+00],
...,
[ 9.97000000e+00, -5.17702654e-04],
[ 9.98000000e+00, -5.94304755e-03],
[ 9.99000000e+00, -1.13692896e-02]])
But if you call
ys = lowess(y, x)[:,1]
you should see something like