You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:33:21