如何阻止fabletools::autoplot按模型分面时为模型应用颜色美学?
按模型分面时,移除fabletools::autoplot()模型颜色美学的官方方法
当使用fabletools::autoplot()对预测结果按.model分面时,默认会为不同模型分配不同的颜色/填充美学,若想取消这一默认行为,无需使用临时hack,以下是两种官方推荐的解决方法:
方法1:直接在autoplot中指定统一美学值
autoplot.fable()支持直接传递colour和fill参数,覆盖默认的.model到颜色的映射,让所有模型的线条和预测区间使用统一样式:
library(tidyverse) library(tsibble) library(feasts) library(fable) library(fabletools) tourism_melb <- tourism %>% filter(Region == "Melbourne") %>% filter(Purpose == "Business") %>% select(-Region, -State, -Purpose) fableModels <- tourism_melb %>% model(arima = ARIMA(), tslm = TSLM(Trips ~ trend()), mean = MEAN(window = 4)) forecasts <- fableModels %>% forecast(h = "2 years") # 指定统一的线条颜色和填充色 forecasts %>% autoplot(tourism_melb, colour = "black", fill = "#cccccc") + facet_wrap(~.model, ncol = 1)
方法2:通过ggplot2标度统一样式并移除图例
如果需要保留部分样式灵活性,可以使用ggplot2的标度函数统一颜色/填充,并移除不必要的图例:
forecasts %>% autoplot(tourism_melb) + facet_wrap(~.model, ncol = 1) + # 为所有模型设置统一颜色 scale_colour_manual(values = rep("black", nrow(fableModels))) + scale_fill_manual(values = rep("#cccccc", nrow(fableModels))) + # 移除颜色和填充图例 guides(colour = "none", fill = "none")
补充说明fabletools::autoplot()的绘图逻辑
fabletools::autoplot()针对fable对象时,默认会将.model列映射到colour和fill美学,用于在同一张图中区分不同模型的预测结果。当按.model分面后,每个面板仅包含单个模型的预测,此时颜色区分失去意义,通过上述方法覆盖默认映射,完全符合包的设计意图,属于官方认可的用法。
内容的提问来源于stack exchange,提问作者lowndrul
相关产品推荐
相关产品推荐

