tl; dr: Ви хочете використовувати curve(з add=TRUE) або lines.
Я не погоджуюся з par(new=TRUE)тим, що це вдвічі надрукує галочки та мітки осі. Напр

Вихід plot(sin); par(new=T); plot( function(x) x**2 ).
Подивіться, як переплутані мітки вертикальної осі! Оскільки діапазони різні, вам потрібно буде встановити ylim=c(lowest point between the two functions, highest point between the two functions), що є менш простим, ніж те, що я збираюся показати вам ---, і набагато легше, якщо ви хочете додати не лише дві криві, а багато.
Те, що мене завжди плутало в плані, - це різниця між curveта lines. (Якщо ви не можете згадати, що це назви двох важливих графічних команд, просто заспівайте .)
Ось велика різниця між curveта lines.
curveбудуватиме функцію, як curve(sin). linesділянки з точки х і у значень, наприклад: lines( x=0:10, y=sin(0:10) ).
І ось незначна різниця: curveвам потрібно подзвонити add=TRUEза тим, що ви намагаєтесь зробити, тоді як linesуже передбачається, що ви додаєте до наявного сюжету.

Ось результат дзвінка plot(0:2); curve(sin).
За лаштунками перевірте methods(plot). І перевірити body( plot.function )[[5]]. Коли ви називаєте plot(sin)R, то з'ясовується, що sinце функція (а не значення y) і використовується plot.functionметод, який завершує виклик curve. Так curveсамо інструмент призначений для обробки функцій.
?curve. Використовуйтеadd=TRUE.