我有一个非常简单的问题,我似乎无法弄明白。我想在一个图中绘制两个方程。我已经尝试add = TRUE
,但这似乎无效。
curve(0.044*x+1.638)
curve(0.3438*x+0.5155, add=TRUE)
答案 0 :(得分:4)
嗯,实际上,curve
确实有效,但你看不到它。为了解释这一点,我们添加了几行代码:
f1 <- function(x) 0.044*x+1.638
f2 <- function(x) 0.3438*x+0.5155
x0 <- seq(0, 1, by = 0.1)
我已根据f1
和f2
定义了您的示例函数。我还在[0,1]
之间采取了11个采样点来评估和绘制。为什么这个范围?因为没有通过参数from
指定,to
(请参阅?curve
),curve
将在此范围内制作情节。
现在,让我们看看:
>f1(x0)
[1] 1.6380 1.6424 1.6468 1.6512 1.6556 1.6600 1.6644 1.6688 1.6732 1.6776
[11] 1.6820
> f2(x0)
[1] 0.51550 0.54988 0.58426 0.61864 0.65302 0.68740 0.72178 0.75616 0.79054
[10] 0.82492 0.85930
f1
的函数值远高于f2
。当您第一次致电curve
来定位f1
时,它会将ylim
修正为大致显示f1(x)
的范围。因此,当您添加f2(x)
时,将不会在此ylim
中看到它。
首先选择共享ylim
:
ylim <- range(c(f1(x0), f2(x0)))
curve(f1, ylim = ylim)
curve(f2, add=TRUE, col = "red")
这类问题是一个常见的陷阱。当您决定在单个图表上绘制多个对象时,您需要设置相应的xlim
和ylim
足以容纳所有物体。不要指望R“在飞行中”调整这些;它无法做到这一点。绘制范围是在第一个绘图时确定的。