【问题标题】:Plotting a function with points()用 points() 绘制函数
【发布时间】:2022-01-06 02:54:55
【问题描述】:

我正在使用 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 似乎很麻烦。

【问题讨论】:

  • 如果你想绘制函数,使用curve函数。
  • 您也可以找到答案here

标签: r plot


【解决方案1】:

您可以使用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 代表@ 987654334@ 在除第一个迭代之外的每个迭代中。

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

【讨论】:

  • 谢谢你 - 我得到了一个很好的解决方案 celsius <- function(x){x}; farenheit <- function(x){(x-32)*5/9}; curve(celsius(x), (from <- -100), (to <- 100)); curve(farenheit(x), from, to, add=TRUE, col="red"); - 不必先分配函数会很好,但这会改善代码
  • 您不必指定函数。使用plot(),您可以使用匿名函数,使用curve(),您可以使用包含x 的表达式(但不只是x,使用(x))。不要使用(from <- -100),使用from = -100;他们不是一回事!例如curve((x), from=-100, to=100); curve((x-32)*5/9, add=TRUE).
  • 不知道,但是很有用;我将相应地编辑我的答案:)
  • @user2554330 我知道它们不是一回事。使用(from <- -100) 是为了使代码动态化:我只需要调整一段代码即可调整所有曲线——它只是一个名为from 的变量,我同样可以使用start 或任何其他变量名称,我选择from是为了代码容易阅读。
  • fromto 参数在 add = TRUE 时被忽略,因此无需重复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多