【问题标题】:curve() does not add curve to my plot when "add = TRUE"当“add = TRUE”时,curve() 不会将曲线添加到我的绘图中
【发布时间】:2016-05-12 22:25:02
【问题描述】:

我有一个非常简单的问题,我似乎无法弄清楚。我想在一张图中绘制两个方程。我试过add = TRUE,但这似乎不起作用。

curve(0.044*x+1.638)
curve(0.3438*x+0.5155, add=TRUE)

【问题讨论】:

    标签: r plot


    【解决方案1】:

    嗯,实际上,curve 确实有效,但您看不到它。为了解释这一点,我们再添加几行代码:

    f1 <- function(x) 0.044*x+1.638
    f2 <- function(x) 0.3438*x+0.5155
    x0 <- seq(0, 1, by = 0.1)
    

    我已经通过f1f2 定义了您的示例函数。我还在[0,1] 之间取 11 个采样点进行评估和绘图。为什么是这个范围?因为没有通过参数指定 fromto(参见 ?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")
    

    这种问题是一个常见的陷阱。当您决定在一个图形上绘制多个对象时,您需要设置适当的xlimylim,它足以容纳所有对象。不要指望 R 会“即时”调整这些;它不能这样做。绘制范围在第一次绘制时确定。

    【讨论】:

    • 很好的解释,尤其是最后一段。 +1
    猜你喜欢
    • 2020-08-24
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多