Построение нескольких линий на одной диаграмме

У меня есть временной ряд, который показывает электрическую нагрузку каждые 15 минут в течение одного года. Я уже отфильтровал, чтобы показать только один конкретный день недели. Мой фрейм данных:

Date        Timestamp     Weekday    Load
2017-01-02  00:00:00      Monday     272
2017-01-02  00:15:00       Monday     400
2017-01-02  00:30:00       Monday     699
2017-01-02  00:45:00       Monday     764
2017-01-02  01:00:00       Monday     983
..
..
2017-01-09  00:45:00       Monday     764
2017-01-09  01:00:00       Monday     983
..
2017-12-25  23:45:00      Monday     983

Теперь я хочу построить несколько линейных диаграмм для каждого понедельника на одной диаграмме: ось x = метка времени, ось y = загрузка

Я пробовал с ggplot:

 ggplot(Loadprofile, aes(x= Timestamp, y = Load, color = Date)) + geom_line()

Но это приносит мне следующую ошибку

Error: Aesthetics must be either length 1 or the same as the data (4992): x, y, colour

Это результат, ось X не выглядит непрерывной?

введите здесь описание изображения

Какие-либо предложения?


person Solar    schedule 02.11.2018    source источник
comment
color = Datum что такое Datum? Возможно изменить color = Weekday   -  person user113156    schedule 02.11.2018
comment
извините, я имею в виду дату, а не датум. Если я поменяю на цвет = день недели, он особо не изменится, потому что у меня в списке только понедельник.   -  person Solar    schedule 02.11.2018
comment
Не могли бы вы использовать функцию dput, чтобы дать нам образец набора данных с двумя понедельниками?   -  person Derek Corcoran    schedule 03.11.2018
comment
Ваша дата и временная метка указаны в дате/времени или в качестве фактора?   -  person Derek Corcoran    schedule 03.11.2018


Ответы (1)


Ваша проблема в том, что вам нужно, чтобы Date был фактором, но когда он находится в форме Date, ggplot воспринимает его как непрерывную переменную.

Я смоделировал некоторые данные, просто чтобы иметь возможность построить график, следующий код — это тот, который я использовал для генерации данных:

library(tidyverse)
library(lubridate)


DateTimes <- seq(
  from=as.POSIXct("2017-1-02 0:00", tz="UTC"),
  to=as.POSIXct("2017-1-09 23:59", tz="UTC"),
  by="15 min"
)  

DF <- data.frame(Date = as.Date(DateTimes), timestamp = strftime(DateTimes, format="%H:%M:%S"), Weekday = weekdays(DateTimes)) %>% filter(Weekday == "Monday") %>% mutate(load = as.numeric(timestamp)*20 + -as.numeric(timestamp)^2 + rnorm(nrow(DF), sd = 1000) + (as.numeric(Date))) %>% mutate(load = ifelse(Date < ymd("2017_01_4"), load -5000, load))

Как только я это сделал, если я сделаю следующее:

ggplot(DF, aes(x = timestamp, y = load)) + geom_line(aes(group = as.factor(Date), color = as.factor(Date

Я получаю следующий график

введите здесь описание изображения

Я думаю, это то, что вам нужно, если вам нужна дополнительная помощь в формировании оси x и легенды, дайте мне знать

Ваше здоровье

person Derek Corcoran    schedule 03.11.2018