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.