Рисуем тепловую карту для 2 столбцов: Time Vs. Электричество

У меня есть фрейм данных из 2 столбцов; где первый столбец содержит данные в формате d/m/y h:m (за один год), а второй столбец содержит показания счетчика электроэнергии. Например:

Date.Time           X
13/12/2014 12:00    164
13/12/2014 12:30    278
13/12/2014 13:00    159
13/12/2014 13:30    302
13/12/2014 14:00    249
13/12/2014 14:30    196
.
.
.
14/12/2014 00:00    137
14/12/2014 00:30    71
14/12/2014 01:00    116
14/12/2014 01:30    92

Я хочу рисовать тепловую карту на каждый день за каждые полчаса. Я пробовал pheatmap, heatmap.2 и heatmap.3, но сообщение об ошибке x' must be a numeric matrix. Мне просто интересно, могу ли я нарисовать карту с этими двумя столбцами или мне сначала расположить данные в одной строке, представляющей данные за один день, например:

day         12:00 12:30 1:00 1:30
13/12/2014    164  278  159 302 ...
14/12/2014    160  178  129 602 ...

Любое предложение, пожалуйста? Спасибо!


person USAL    schedule 20.08.2015    source источник
comment
Это должно быть легко сделать с geom_tile() ggplot2, если вы сделаете отдельные столбцы для даты и времени. Затем сделайте что-то вроде ggplot(df, aes(x=date, y=time, fill=X)) + geom_tile().   -  person ulfelder    schedule 20.08.2015


Ответы (1)


Вы не хотите изменять данные из длинного в широкий формат; вам просто нужно разделить дату и время, чтобы вы могли использовать их на отдельных осях. Вот что я сделал с некоторыми игрушечными данными:

library(ggplot2)

# Make some toy data with a year's worth of observations on every half hour
df <- data.frame(date.time = seq(from = as.POSIXct("2015-01-01"), to = as.POSIXct("2015-12-31"), by=30))
df$X <- rnorm(nrow(df), 100, 25)

# Create separate vectors for date and time, preserving date/time format
df$date <- as.Date(df$date.time)
df$time <- strftime(df$date.time, format="%H:%M:%S")

# Now use ggplot2's geom_tile() to make the heatmap
p <- ggplot(df, aes(x=time, y=date, fill=X)) + geom_tile()
print(p)
person ulfelder    schedule 20.08.2015
comment
Спасибо, что нашли время и написали сюда. У меня есть несколько проблем с этим кодом, которые я пытаюсь решить, 1-й: переменная «время» предоставляет мне вектор в следующем формате: «00:00:00», «00:00:30», «00:01: 00 ', '00,01:30'... что означает, что данные собираются каждые 30 секунд, но в моем случае данные собираются каждые 30 минут. Во-вторых, я хочу видеть тепловую карту, соответствующую каждому дню, например, я хочу визуализировать использование энергии через каждые полчаса в течение одного дня, а затем вторую строку для второго дня. Извините, если я не смог объяснить. Вы можете спросить меня, если это неясно. Спасибо еще раз - person USAL; 24.08.2015
comment
Временные интервалы в игрушечных данных не имеют значения для того, как код будет работать с вашими данными. Если вам нужны игрушечные данные с 30-минутными интервалами, просто измените последний бит первой строки на by=30*60. В любом случае, если у вас есть наблюдения за каждые 30 минут во фрейме данных с именем df, то df$time <- strftime(df$date.time, format="%H:%M:%S") должно возвращать то же самое. И aes(x=time, y=date, fill=X) будет делать то, что вы описываете: дни в виде строк, временные интервалы в виде столбцов, цвет заливки на основе значений X. - person ulfelder; 24.08.2015
comment
Я только что установил R версии 3.2.2 и установил ggplot2, но пакет ggplot не работает с этой версией :-( У вас есть идеи, что с этим не так. Я не хочу переключаться на последнюю версию, потому что ddplyr там не работал , любая подсказка? - person USAL; 24.08.2015
comment
Нет, извините, я не могу вам помочь. - person ulfelder; 24.08.2015
comment
Все в порядке. Я пытаюсь найти решение. Спасибо за помощь. Я ценю. - person USAL; 24.08.2015