2016-05-25 7 views
0

У меня есть карта тепла, показывающая значение с парным наблюдением года по оси y и час наблюдения в нижней оси. Данные хранятся в объекте data.table.Как я могу установить ось y этого `geom_tile`, чтобы в каждой точке была отформатирована метка` yearmon`?

В умолчанию ggplot2 графика выглядит следующим образом:

base ggplot

ggplot(repeatability, aes(x = iHrMi, y = iYrMo, fill = erraticity)) + 
    geom_tile() + 
    facet_grid(. ~ off) + 
    scale_x_discrete(name = "Time", breaks = c("00:00", "12:00")) 

Что-то хорошо, но моя цель состоит в том, чтобы иметь метки на оси у включает сокращенное название, а не числа, месяца и сохранения их порядка. zoo имеет расширение ggplot2, которые позволяют наметить yearmon объектов, как так:

with zoo::yearmon and expand = 0

ggplot(repeatability, aes(x = iHrMi, y = zoo::as.yearmon(iYrMo), fill = erraticity, group = iYrMo)) + 
    geom_tile() + 
    facet_grid(. ~ off) + 
    zoo::scale_y_yearmon(name = "Year Month", expand = c(0,0)) + 
    scale_x_discrete(name = "Time", breaks = c("00:00", "12:00")) 

Это имеет правильный формат, но не правильное число наклеек, я хочу один для каждого месяца. Кроме того, если expand оставлено по умолчанию, ось y расширяется и включает периоды, в которых нет данных.

Если я поставлять n аргумент, хотя, чтобы получить 12 ярлыков, это происходит:

with zoo::yearmon and expand = 0 AND n= 12

Я не получаю двенадцать строк, но я получаю дополнительный нечетное метка дуют ось х перехватывать.

ggplot(repeatability, aes(x = iHrMi, y = zoo::as.yearmon(iYrMo), fill = erraticity, group = iYrMo)) + 
    geom_tile() + 
    facet_grid(. ~ off) + 
    zoo::scale_y_yearmon(name = "Year Month", expand = c(0,0), n = 12) + 
    scale_x_discrete(name = "Time", breaks = c("00:00", "12:00")) 

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

structure(list(iYrMo = c("2013-08", "2013-08", "2013-08", "2013-08", 
"2013-08", "2013-08"), iHrMi = c("00:00", "00:30", "01:00", "01:30", 
"02:00", "02:30"), off = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Weekday", 
"Weekend/Holiday"), class = "factor"), fit = c(0.883255368890743, 
0.888802101750935, 0.887399903327103, 0.896846543832244, 0.895936947283074, 
0.898059799540441), erraticity = structure(c(4L, 4L, 4L, 4L, 
4L, 4L), .Label = c("Most", "More", "Less", "Least"), class = "factor")), .Names = c("iYrMo", 
"iHrMi", "off", "fit", "erraticity"), class = c("data.table", 
"data.frame"), row.names = c(NA, -6L)) 

ответ

1

Обратите внимание, что yearmon является только двойным типом, с 0 сравнявшись Jan 0000 и 2013 + 6/12 сравнявшись July 2013

Вы можете использовать пределы и разрывы аргументы (тот же, что и в scale_y_continuous от ggplot):

library(zoo) 
ggplot(repeatability, aes(x = iHrMi, y = as.yearmon(iYrMo), fill = erraticity, group = iYrMo)) + 
    geom_tile() + 
    facet_grid(. ~ off) + 
    scale_y_yearmon(name = "Year Month", limits = c(2013,2015), breaks = seq(2013,2015, by = 1/12)) + 
    scale_x_discrete(name = "Time", breaks = c("00:00", "12:00")) 

Что с воспроизводимыми данными дает:

enter image description here

Беспощадно, но ось правильная.

+0

Спасибо, ось действительно правильная, так что половина ее выполнена. Тем не менее, проблема связана с расширением оси за пределами диапазона данных. Чтобы изменить этот подход, чтобы как удовлетворить правильные пределы оси, так и включить правильный аргумент «expand», я буду использовать: «scale_y_yearmon (name =« Year Month », expand = c (0,0), breaks = seq (repeatability [, min (as.yearmon (iYrMo))], repeatability [, max (as.yearmon (iYrMo))], by = 1/12) '. Это также позволяет ограничениям масштаба реагировать на набор данных, обеспечивая при этом всегда 12 ярлыков. Спасибо за помощь. – DaveRGP

 Смежные вопросы

  • Нет связанных вопросов^_^