У меня есть карта тепла, показывающая значение с парным наблюдением года по оси y и час наблюдения в нижней оси. Данные хранятся в объекте data.table
.Как я могу установить ось y этого `geom_tile`, чтобы в каждой точке была отформатирована метка` yearmon`?
В умолчанию ggplot2
графика выглядит следующим образом:
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
объектов, как так:
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 ярлыков, это происходит:
Я не получаю двенадцать строк, но я получаю дополнительный нечетное метка дуют ось х перехватывать.
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))
Спасибо, ось действительно правильная, так что половина ее выполнена. Тем не менее, проблема связана с расширением оси за пределами диапазона данных. Чтобы изменить этот подход, чтобы как удовлетворить правильные пределы оси, так и включить правильный аргумент «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