Ordering of points in R lines plot
When you plot a line, all the points are connected in the order they were received. Looks like you want to sort your hp
values before connecting the points
res <- data.frame(cbind(mpg, fitted(fit), hp))
res <- res[order(hp), ]
with(res, plot(hp, mpg))
with(res, lines(hp, V2))
to get
Also, to get a smoother line, you might considering predicting at points other than just the hp
values you observed. After you fit your model, you can do
php <- seq(min(hp), max(hp), length.out=100)
p <- predict(fit, newdata=data.frame(hp=php))
plot(hp, mpg)
lines(php, p)