我正在做一个时间序列项目。我想将“ y”数据与“ y_hat”进行比较。我所说的“ y”是我的数据集中的数据,而“ y_hat”是我的算法所预测的。
我尝试使用facet_wrap,不幸的是,如您在图像上看到的那样,它按类别绘制了一个时间序列:
nb_of_algorithm <- 6
gather_df <- df_all %>% gather(key="Algorithm", "values", 2:nb_of_algorithm)
ggplot(gather_df, aes(x = ds, y = values)) +
geom_line(aes(color = Algorithm)) +
scale_color_brewer(palette="Dark2") +
facet_wrap(~ Algorithm)
然后添加一个数据框外观示例
ds Algorithm values
1 2018-10-19 y 8115.000
2 2018-10-20 y 8730.000
3 2018-10-21 y 7155.000
4 2018-10-22 y 570.000
164 2018-10-19 y_hat_xgboost 3458.394
165 2018-10-20 y_hat_xgboost 6424.176
166 2018-10-21 y_hat_xgboost 3416.893
167 2018-10-22 y_hat_xgboost 12041.853
168 2018-10-23 y_hat_xgboost 9801.245
169 2018-10-24 y_hat_xgboost 11081.888
327 2018-10-19 y_hat_nnetar 7188.586
328 2018-10-20 y_hat_nnetar 6606.201
329 2018-10-21 y_hat_nnetar 10488.071
330 2018-10-22 y_hat_nnetar 17417.546
331 2018-10-23 y_hat_nnetar 14230.000
预期结果将与上述相同,并在同一图上显示:
*“ y”和“ y_hat_xgboost”
*“ y”和“ y_hat_nnetar”
*等等...
所以我可以将它们与真实数据进行比较
感谢您的帮助
答案 0 :(得分:0)
本质上,我们需要两件事:1)不要为y
设置单独的类别,2)在其余每个类别中添加y
的额外层。因此,
ggplot(gather_df %>% filter(Algorithm != "y"), aes(x = ds, y = values)) +
geom_line(aes(color = Algorithm)) +
scale_color_brewer(palette = "Dark2") +
facet_wrap(~ Algorithm) +
geom_line(data = gather_df %>% filter(Algorithm == "y") %>% select(-Algorithm))
我们实现了这一点,其中gather_df %>% filter(Algorithm != "y")
执行第1)部分,最后一行执行2)。
如果希望y
的曲线出现在图例中,也可以在最后一行添加aes(color = "y")
。这给出了
答案 1 :(得分:0)
如果在每个面板上都希望“ y”,则不想收集它。试试这个:
nb_of_algorithm <- 6
gather_df <- df_all %>%
gather(key="Algorithm", "values", 2:nb_of_algorithm, -y)
ggplot(gather_df, aes(x = ds, y = values)) +
geom_line(aes(color = Algorithm)) +
geom_line(aes(y = y), colour = "black") +
scale_color_brewer(palette="Dark2") +
facet_wrap(~ Algorithm)
我没有数据,所以我无法尝试,但是我希望它至少可以使您朝着正确的方向前进。