我试图在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 ,但这一行不行。
1条答案
按热度按时间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认为它正在绘制线,但由于绘图效率低,实际上什么也没做,因为线是在画布外的。为此,您可能需要预先设置限制:
如果您想考虑迁移到
ggplot2
,请继续阅读本文......这不是一对一的迁移,也不是微不足道的,也许在这一点上还为时过早,但仍然需要考虑。1.虽然上面的方法可以解决您提到的问题,但您也可以考虑迁移到
ggplot2
:它允许很多其他的功能(太多了,在这里讨论),包括更新每个“层”的x/y限制的功能。例如,我想知道上面的功能是否有效:(请注意,无需手动处理x/y限制,ggplot 2会在添加每一层时为您计算该限制。)
我将推断您还希望添加一个
pred - 2*se
,在这种情况下,将是对geom_line
的另一次调用,如下所示请注意,
ggplot2
实际上更希望您使用“long”数据来处理此问题...在这种情况下,我们可以执行以下操作:在本例中,只需调用一次
geom_line
,ggplot就会自动处理颜色(基于我们在上一步中创建的新分类变量type
)。