ggplot: настроить цвет и названия меток автоплота разложения STL - PullRequest
0 голосов
/ 26 мая 2020

Вот этот, если для вас, Smart Data Artists:

Я пытаюсь раскрасить график декомпозиции временного ряда с помощью переменной, отличной от той, которая используется по умолчанию при вызове autoplot функция для результата разложения STL. Я пытаюсь выяснить, отличается ли тенденция или сизональность некоторых значений от других в зависимости от высоты измерительной станции. Позвольте мне объяснить воспроизводимый пример, который требует tidyverse, tsibble и feasts:

library('tidyverse')
library('tsibble')
library('feasts')

set.seed(100)

ts <- tsibble(
  mth = rep(yearmonth("2010 Jan") + 0:8, 3),
  id = c(rep("x",9), rep("y", 9), rep("z", 9)),
  height = c(rep(0, 9), rep(10, 18)),
  value = c(rnorm(9), rnorm(18, 5)),
  key = c(id),
  index = mth
)

ts %>% 
  group_by(id) %>% 
  model(STL(value ~ trend() + season(window = 'periodic'))) %>% 
  components() %>% 
  autoplot()

Это даст следующий график: enter image description here

Вы можете увидеть линии окрашиваются в зависимости от идентификатора. Вместо этого я хочу иметь цвета в соответствии со значением соответствующей высоты. Ожидаемый результат будет заключаться в том, что две верхние линии имеют один и тот же цвет, поскольку обе имеют высоту 10. Я пытался установить цвет, используя autoplot(color = ts$height), но это дает мне ошибку

Error: Aesthetics must be either length 1 or the same as the data (81): colour

Это кажется разумным, так как автоплот создает для меня три графика и 27 * 3 = 81. Поэтому я попытался воспроизвести значения ts$height. И rep(ts$height, 3), и c(ts$height, ts$height, ts$height) выдают мне ошибку:

Error: colours encodes as numbers must be positive

Этого я не понимаю. Я также пробовал autoplot(aes(color = ts$height)), но это дает Error: Can't convert a call to a string, поэтому я думаю, что это совершенно неправильно.

Кроме того, я хочу изменить метки в легенде: я пробовал + scale_color_manual(labels = unique(ts$id), values = c("red", "blue", "green")), но мне это не нравится (Мне кажется, что это жестко запрограммировано, и если я ошибаюсь в сопоставлении, цвета также будут смешаны; и мне придется вручную указать фактические значения цвета). В моем фактическом коде у меня много идентификаторов, которые приведут к легенде из нескольких столбцов, которая, в свою очередь, искажает общую картину:

enter image description here

Довольно уродливо, да ?

В любом случае: я чувствую, что это не должно быть слишком сложно, но я, кажется, что-то упускаю. Можете ли вы сказать мне, как я могу использовать переменную высоты для раскрашивания линий, желательно с помощью некоторой непрерывной цветовой палитры, такой как viridis?

...