使用autoplot和ggplot更改每个时间序列的线型/宽度

时间:2018-01-24 20:42:15

标签: r ggplot2 time-series

我正在尝试创建一个包含两个时间序列的图:

library(zoo)
library(tseries)
library(ggplot2)
library(ggfortify)

ts1 <- ts(c(1,2,3,4))
ts2 <- ts(c(1.1, 2.1, 3.1, 4.1))
autoplot(ts.union(ts1, ts2), facets = FALSE) +
scale_color_manual(breaks = c("ts1", "ts2"), labels = c("Actual", "Forecasted"), values=c("black", "red"))

更改每个系列的图例标题和颜色后,我想修改线宽和类型,也是按系列修改,但调用scale_linetype_manual似乎不会稍微改变一下。我该怎么办?

1 个答案:

答案 0 :(得分:2)

在更改之前,您需要为绘图添加相应的美学效果。为此,您需要知道autoplot用于美学映射的变量的名称:请参阅色标的名称。

用于绘图的数据框如下所示

#  Index plot_group value
#1     1        ts1   1.0
#2     2        ts1   2.0
#3     3        ts1   3.0
#4     4        ts1   4.0
#5     1        ts2   1.1
#6     2        ts2   2.1
#7     3        ts2   3.1
#8     4        ts2   4.1

autoplot为您创建列plot_group,为了区分这两个时间序列,它会(仅)将颜色映射到它。因此,您可以致电scale_color_manual

您可以使用此变量将另一个美学映射到它,例如sizelinetype

autoplot(ts.union(ts1, ts2), facets = FALSE) +
 scale_color_manual(labels = c("Actual", "Forecasted"),
                    values=c("black", "red")) +
 aes(linetype = plot_group,
     size = plot_group) +
 scale_linetype_manual(labels = c("Actual", "Forecasted"),
                       values = c(1, 2)) +
 scale_size_manual(labels = c("Actual", "Forecasted"),
                   values = c(1, 2))

enter image description here

数据

p <- autoplot(ts.union(ts1, ts2), facets = FALSE)
p$data