如何让 plot.ts 接受 par 或 layout 参数?

3

我试图在plot.ts中使用par,但它不起作用。检查代码后发现,plot.ts已经内部使用了par,可能会导致冲突。但是,layout也不起作用。这是我使用两种方法的代码,图形一个接一个地绘制,但是两种方法都没有并排绘制出来:

## using `par`
op <- par(mfrow=c(1, 2))
plot(stl(co2, s.window=21), plot.type="single")
plot(stl(log(co2), s.window=21), plot.type="single")
par(op)

## using `layout`
op <- par(no.readonly=TRUE)
layout(matrix(1:2, 1))
par(mfrow=c(1, 2))
plot(stl(co2, s.window=21), plot.type="single")
plot(stl(log(co2), s.window=21), plot.type="single")
par(op)

我很惊讶这个问题似乎之前没有被问到过。我该如何让plot.ts函数接受parlayout或任何绘制并列图的方法?


不确定您是否使用ggplot,但有一个名为“patchwork”的包,它具有良好的界面与ggplots合作和优美的句法来排列图。简单地说,您可以编写P1+P2以侧边排列两个图。 - monte
@MohitSharma 我在谈论 stats::plot.ts 函数,谢谢。 - jay.sf
1
实际上,您正在调用plot.stl,它也会在内部修改par设置。我认为您将不得不利用一些技巧。 - Edward
1个回答

1

你应该能够通过对统计包中的plot.stl函数进行一些小的修改来实现这一点。

只需注释掉第15至19行即可。

#15:  if (length(set.pars)) {
#16:    oldpar <- do.call("par", as.list(names(set.pars)))
#17:    on.exit(par(oldpar), add = TRUE)
#18:    do.call("par", set.pars)
#19:  }

然后使用一个 8x2 的矩阵与 layout 配合使用:
layout(matrix(1:8, ncol=2, byrow=FALSE))
layout.show(8)
op <- par(mar = c(0, 4, 0, 4), oma = c(2, 0, 2, 0), tck = -0.02)
plot(stl(co2, s.window=21), plot.type="single")
plot(stl(log(co2), s.window=21), plot.type="single")
par(op)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接