цветные поля в качестве фона с ggplot для временных рядов данных - PullRequest
0 голосов
/ 01 апреля 2020

Я хотел бы раскрасить фон ggplot. Это почти описано здесь: ссылка , но есть некоторые издания, которые делают мою идею просто не работающей. Во-первых, мои данные выглядят так:

# airquality
rects = data.frame(start = seq(0, 200, 50), end = seq(50, 250, 50), level = c ("good", "moderate", "unhealthy for sensitive groups", " unhealty", "very unhealth"))

Я хотел бы создать фон для некоторых данных качества. Эти данные имеют метки времени. Таким образом, ось X будет работать от sys.Date()-90 до sys.Date(). У оси Y есть несколько уровней концентрации no2, которые я хотел бы придать некоторым цветам. Мой подход следующий:

datemin = as.Date(sys.Date() - 90)
datemax = as.Date(sys.Date())

ggplot() + geom_rect(data = rects, aes(xmin = datemin, xmax = datemax, ymin = start, ymax = end, fill = level), alpha = 0.5) 

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

enter image description here

Пока все хорошо. Но я бы хотел придать каждой коробке определенный цвет. И я не знаю, как это сделать.

Более того, когда я объединяю это с моими данными временного ряда, он говорит: Error: Invalid input: time_trans works with objects of class POSIXct only

Так что мои вопросы таковы: как получить определенный c цвет для каждой коробки. И как убедиться, что даты назначены?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

вот мое решение

ggplot() +
  geom_rect(data = rects, aes(xmin = datemin, xmax = datemax, ymin = start, ymax = end, fill = level), alpha = 0.5)+
   scale_fill_manual(values = c("red", "blue", "green","orange","grey")

1 голос
/ 01 апреля 2020

Цвета заливки можно указать вручную, используя scale_fill_manual, с атрибутом names вектора, который используется для назначения правильного цвета правильной группе. Код будет:

colours <- c("violet","purple","blue","green","yellow")
names(colours) <- rects$level

colours
#                               good                       moderate unhealthy for sensitive groups                       unhealty                  very unhealth 
#                           "violet"                       "purple"                         "blue"                        "green"   

ggplot() + geom_rect(data = rects, aes(xmin = datemin, xmax = datemax, ymin = start, ymax = end, fill = level), alpha = 0.5) +
  scale_fill_manual(values=colours)
...