tl; dr: Chcesz użyć curve(z add=TRUE) lub lines.
Nie zgadzam się z par(new=TRUE)tym, ponieważ spowoduje to podwójne wydrukowanie znaczników i etykiet osi. Na przykład

Dane wyjściowe plot(sin); par(new=T); plot( function(x) x**2 ).
Zobacz, jak pomieszane są etykiety osi pionowej! Ponieważ zakresy są różne, musisz ustawić ylim=c(lowest point between the two functions, highest point between the two functions), co jest mniej łatwe niż to, co zamierzam ci pokazać --- i znacznie mniej łatwe, jeśli chcesz dodać nie tylko dwie krzywe, ale wiele.
To, co zawsze myliło mnie w spiskowaniu, to różnica między curvei lines. (Jeśli nie pamiętasz, że są to nazwy dwóch ważnych poleceń drukowania, po prostu zaśpiewaj .)
Oto duża różnica między curvei lines.
curvewykreśli funkcję, np curve(sin). linesDziałki punktów z wartości x i y, takie jak: lines( x=0:10, y=sin(0:10) ).
A oto niewielka różnica: curvetrzeba się do niego zwrócić z add=TRUEtym, co próbujesz zrobić, przy lineszałożeniu, że dodajesz do istniejącej fabuły.

Oto wynik połączenia plot(0:2); curve(sin).
Za kulisami sprawdź methods(plot). I sprawdź body( plot.function )[[5]]. Kiedy wywołujesz plot(sin)R, odkrywa, że sinjest to funkcja (a nie wartości y) i używa plot.functionmetody, która kończy się wywołaniem curve. Podobnie curvenarzędzie przeznaczone do obsługi funkcji.
?curve. Zastosowanieadd=TRUE.