用 points() 绘制一个函数

Plotting a function with points()

我正在使用 R 绘制一个函数,并想在同一个图中添加描述多个函数的行。为了绘制一个函数,我写:

plot(function(x){x}, 
     xlab="Celsius", xlim=c(-100, 100), 
     ylab="Degrees", ylim=c(-100, 100))

这将绘制一条 1:1 线。如果我想 在同一张图上绘制不同的函数 ,我可以使用 points() 函数,但这需要提供 x 的数据值,以便它绘制 length(x) 个点(由线连接)为:

points(x=seq(-100, 100, by=0.1), 
       y=c(seq(-100, 100, by=0.1)-32)*5/9, 
       typ="l", col="red")

是否可以在绘制函数时向绘图添加线条,而不必使用 points() 或其他函数计算数据点? 本质上,它是像这样:

plot(function(x){x}, 
     xlab="Celsius", xlim=c(-100, 100), 
     ylab="Degrees", ylim=c(-100, 100))
points(function(x){(x-32)*5/9}, 
       typ="l", col="red")

这只是一个示例,它显示了 X 轴上的摄氏度与 Y 轴上的摄氏度(黑色)和华氏度(红色)之间的关系。实际上我想绘制多个复杂的函数,但这只会给问题增加噪音。


我找到的一个解决方案是

plot(function(x){x}, 
     xlab="Celsius", xlim=c(-100, 100), 
     ylab="Degrees", ylim=c(-100, 100))
par(new=TRUE)
plot(function(x){(x-32)*5/9}, 
     xlab="", xlim=c(-100, 100), 
     ylab="", ylim=c(-100, 100),
     axes=FALSE, col="red")

但每次都必须定义限制和标签并且 AXES=FALSE 似乎很麻烦。

您可以使用plot函数两次并为第二个绘图添加add = TRUE

使用plot,您还可以使用fromto参数来避免重复y轴限制,尽管它会保留第一个定义的y轴限制情节(所以它可能不是最佳的)。

plot(function(x){x}, 
     xlab="Celsius", xlim=c(-100, 100), 
     ylab="Degrees", ylim=c(-100, 100))
plot(function(x) {(x-32)*5/9}, from = -100, to = 100, typ="l", col="red", add=T)

如@Roland 和@user2554330 所述,如果要从同一函数绘制多条线,也可以使用 curves,并使用 () 避免预先分配函数,使用add = i!=1 在每次迭代中代表 add = T,除了第一次。

for(y in 1:10) {
  curve((x + 10*y), from=-100, to=100, add=i!=1)
}