#r #ggplot2 #posixct
#r #ggplot2 #posixct
Вопрос:
Я пытаюсь создать график ggplot2 с помощью facet_grid(). Каждый фасет должен быть озаглавлен датой (здесь объект POSIXct), и я хотел бы изменить способ его отображения.
Как я могу контролировать способ отображения объектов POSIXct в названии фасетов ggplot2?
Пример: вот как это отображается: «2019-03-29» и вот как я хотел бы видеть это написанным: «29/03/2018»
Я уже посмотрел на функцию labeller, но я не могу понять, как использовать ее, чтобы изменить способ отображения объектов POSIXct. Возможно, я чего-то не понимаю. Я знаю, что метки фасетов можно изменить «вручную», но здесь я хочу решение, которое работает для любого объекта POSIXct.
# create a dummy dataframe named ex
ex = structure(list(date = structure(c(1510531200, 1510531200, 1522195200,
1522195200), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
cat = c("a", "b", "a", "b"), measure = c(0.0777420913800597,
0.71574708330445, 0.725231731543317, 0.217509124660864)), row.names = c(NA,
-4L), vars = "date", indices = list(0:1, 2:3), group_sizes = c(2L,
2L), biggest_group_size = 2L, labels = structure(list(date = structure(c(1510531200,
1522195200), class = c("POSIXct", "POSIXt"), tzone = "UTC")), row.names = c(NA,
-2L), class = "data.frame", vars = "date", indices = list(c(0L,
1L, 8L, 9L, 16L, 17L), c(2L, 3L, 4L, 5L, 10L, 11L, 12L, 13L,
18L, 19L, 20L, 21L), c(6L, 7L, 14L, 15L, 22L, 23L)), group_sizes = c(6L,
12L, 6L), biggest_group_size = 12L, labels = structure(list(date = structure(c(1510531200,
1522195200, 1543881600), class = c("POSIXct", "POSIXt"), tzone = "UTC")), row.names = c(NA,
-3L), class = "data.frame", vars = "date"), drop = TRUE), drop = TRUE, class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
# create a graph
plot_ex = ggplot(ex, aes(x = cat, y = measure))
geom_bar(stat = "identity")
facet_grid(.~date)
print(plot_ex)
Фасеты называются «2017-11-13» и «2018-03-28». Я хочу, чтобы они были «13/11/2017» и «28/03/2018».
Большое спасибо за вашу помощь,
Ответ №1:
Вы можете изменить способ печати дат с помощью format
. Используя это, мы можем установить соответствующий ярлык, не изменяя столбец data.frame.
ggplot(ex, aes(x = cat, y = measure))
geom_bar(stat = "identity")
facet_grid(.~date, labeller = function(x) format(x, '%d/%m/%Y'))
Комментарии:
1. Большое спасибо, я полностью пропустил эту опцию «format ()», когда тестировал код.
Ответ №2:
Мы можем использовать strftime
.
ex$date <- strftime(ex$date, format="%d/%m/%Y")
library(ggplot2)
plot_ex <- ggplot(ex, aes(x=cat, y=measure))
geom_bar(stat="identity")
facet_grid(.~date)
print(plot_ex)
Комментарии:
1. Большое вам спасибо, этот ответ работает и хорош, когда вы можете изменять данные вне процесса создания графика. Однако здесь я действительно не могу этого сделать (мой плохой, я должен был лучше объяснить в своем посте).
2. Я думаю, что этот метод не сохраняет порядок сортировки дат.