Вот этот, если для вас, 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()
Это даст следующий график:
Вы можете увидеть линии окрашиваются в зависимости от идентификатора. Вместо этого я хочу иметь цвета в соответствии со значением соответствующей высоты. Ожидаемый результат будет заключаться в том, что две верхние линии имеют один и тот же цвет, поскольку обе имеют высоту 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"))
, но мне это не нравится (Мне кажется, что это жестко запрограммировано, и если я ошибаюсь в сопоставлении, цвета также будут смешаны; и мне придется вручную указать фактические значения цвета). В моем фактическом коде у меня много идентификаторов, которые приведут к легенде из нескольких столбцов, которая, в свою очередь, искажает общую картину:
Довольно уродливо, да ?
В любом случае: я чувствую, что это не должно быть слишком сложно, но я, кажется, что-то упускаю. Можете ли вы сказать мне, как я могу использовать переменную высоты для раскрашивания линий, желательно с помощью некоторой непрерывной цветовой палитры, такой как viridis?