R中的“lines”函数未显示

vwkv1x7d  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(348)

我试图在R中添加置信区间的行,但是lines()不起作用。在下面的代码中,b是一个 Dataframe ,包含两个变量“pred”和“se”的100个观测值。

plot(c(1:300),b$pred,type="l",lwd=1.5)
lines(c(1:300),b$pred+2*b$se,type="l",lty=2,col='red')

第一行可以工作,但第二行不行。我已经尝试了使用和不使用x值(plot可以使用或不使用x值,lines两种情况都不适用)。我可以让行适用于不同的 Dataframe ,但这一行不行。

vi4fp9gy

vi4fp9gy1#

1.在引用b的同时使用1:300对我来说似乎非常脆弱;当b有300行时,它可能会工作,但在其他任何时候,它要么发出警告,要么 * 静默地 * 循环并显示误导性/无意义的图。通常,在以这种方式编程时,“永远不要”使用硬编码的数字,seq_len(nrow(b))可能比1:300更好。
1.绘图的边界(x/y限制)是由第一个plot命令定义的。在这之后,在base R图形中,没有其他绘图命令会改变限制。这意味着很可能所有的pred+2*se都大于max(pred),所以R认为它正在绘制线,但由于绘图效率低,实际上什么也没做,因为线是在画布外的。
为此,您可能需要预先设置限制:

xlims <- with(b, range(c(pred, pred+2*se), na.rm = TRUE))
plot(seq_len(nrow(b)), b$pred, type="l", lwd=1.5, xlim=xlims)
lines(seq_len(nrow(b)), b$pred+2*b$se, type="l", lty=2, col='red')

如果您想考虑迁移到ggplot2,请继续阅读本文......这不是一对一的迁移,也不是微不足道的,也许在这一点上还为时过早,但仍然需要考虑。
1.虽然上面的方法可以解决您提到的问题,但您也可以考虑迁移到ggplot2:它允许很多其他的功能(太多了,在这里讨论),包括更新每个“层”的x/y限制的功能。例如,我想知道上面的功能是否有效:

library(ggplot2)
ggplot(b, aes(x = seq_along(pred), y = pred)) +
  geom_line(linewidth = 1.5) +            # this is doing what your first 'plot' is doing
  geom_line(aes(y = pred + 2*se), linewidth = 2, color = "red") # your call to lines

(请注意,无需手动处理x/y限制,ggplot 2会在添加每一层时为您计算该限制。)
我将推断您还希望添加一个pred - 2*se,在这种情况下,将是对geom_line的另一次调用,如下所示

ggplot(b, aes(x = seq_along(pred), y = pred)) +
  geom_line(linewidth = 1.5) +
  geom_line(aes(y = pred + 2*se), linewidth = 2, color = "red") +
  geom_line(aes(y = pred - 2*se), linewidth = 2, color = "blue")

请注意,ggplot2实际上更希望您使用“long”数据来处理此问题...在这种情况下,我们可以执行以下操作:

library(dplyr)
library(tidyr) # pivot_longer
b %>%
  select(x, pred, se) %>%
  mutate(
    x = row_number(),
    sehigh = pred + 2*se,
    selow  = pred - 2*se
  ) %>%
  pivot_longer(-x, names_to = "type", values_to = "val") %>%
  ggplot(aes(x, val, group = type, color = type)) +
  geom_line() +
  scale_color_manual(values = c(pred = "black", sehigh = "red", selow = "blue"))

在本例中,只需调用一次geom_line,ggplot就会自动处理颜色(基于我们在上一步中创建的新分类变量type)。

相关问题