Luis Ramon Ramirez Rodriguez - 1 year ago 77

Python Question

I'm making a linear regression and plotting the data points as well as the regression line.

The code I'm making it this way:

`x = np.r_[0.,3.15,5.39,7.29,11.55,14.4,19.8,23.4,25.7]`

y = np.r_[0,0.13,0.2,0.27,0.42, 0.51,0.68,0.80,0.88]

model = linear_model.LinearRegression()

X = x.reshape(-1,1)

Y = y.reshape(-1,1)

model.fit(X,Y)

plt.plot(x,y,'*')

plt.plot(x,model.predict(X))

plt.legend('experimental values')

plt.show()

I want to make the legend to have both, the line and the dot as 'experimental values '

Similar as this image:

Answer

The following seems to work:

```
import matplotlib.pyplot as plt
from sklearn import linear_model
# Funky hack to change the number of "stars" in the legend to be 1,
# I feel like there has to be a better way to do this...
from pylab import *
rcParams['legend.numpoints'] = 1
x = np.r_[0.,3.15,5.39,7.29,11.55,14.4,19.8,23.4,25.7]
y = np.r_[0,0.13,0.2,0.27,0.42, 0.51,0.68,0.80,0.88]
model = linear_model.LinearRegression()
X = x.reshape(-1,1)
Y = y.reshape(-1,1)
model.fit(X,Y)
blue_dot, = plt.plot(x,y, '*')
green_line, = plt.plot(x,model.predict(X), 'g')
plt.legend([(blue_dot, green_line)], ["DesiredKey"], loc='upper center')
plt.show()
```

Output is:

The trick to finding this solution was hunting through the docs (per usual), and finding an example of the `HandlerTuple`

class. See here. Hope this is what you wanted, let me know if I missed something!

Source (Stackoverflow)