如何使用 R 中的 Plot 绘制多个时间序列(常见 x-axis 与垂直面)?

How to plot multiple time series (common x-axis with vertical facet) using Plot in R?

我正在尝试在 R 中绘制 4 个时间序列的垂直堆栈图。以下代码可以显示该图,但 'lty' 和 'col' 参数无法正常工作。同时,虽然使用了“main=NULL”,但标题仍然显示。有什么办法可以解决这个问题吗?

另外,请问有什么方法可以设置每个小地块的“xlim”吗?谢谢。

data(UKgas)
ts1 = UKgas
ts2 = UKgas+100
ts3 = UKgas+500
ts4 = UKgas+1000

plot(ts.union(TS1 = ts1, TS2 = ts2,TS3 = ts3, TS4 = ts4), lty = 1:4, col = 1:4, main = NULL)

绘制一个ts.union对象调用方法stats:::plot.ts,从源代码来看,这恐怕只会采用一种颜色。您可以使用一些数据整理和 ggplot2 获得您想要的结果,另外一个好处是该图是完全可定制的。

library(ggplot2)
library(tidyr)

ts_s  <- ts.union(TS1 = ts1, TS2 = ts2,TS3 = ts3, TS4 = ts4)
times <- attr(ts_s, "tsp")
df    <- cbind(as.data.frame(ts_s), year = seq(times[1], times[2], 1/times[3]))

ggplot(pivot_longer(df, 1:4), aes(year, value, colour = name)) +
  geom_line(aes(linetype = name)) +
  scale_x_continuous(breaks = seq(1960, 1985, 5)) +
  facet_grid(name~., switch = "y", scales = "free_y") +
  labs(title = NULL) +
  theme_classic() +
  theme(panel.background = element_rect(color = "black"),
        strip.placement = "outside",
        strip.background = element_blank(),
        panel.spacing.y = unit(0, "npc"),
        strip.text = element_text(size = 16, face = 2),
        legend.position = "none")

reprex package (v2.0.1)

创建于 2022-03-13