#r #ggplot2
#r #ggplot2
Вопрос:
У меня есть наборы данных, структурированные следующим образом
date transaction
8/15/2020 585
8/14/2020 780
8/13/2020 1427.8
8/12/2020 4358
8/11/2020 780.9
8/8/2020 585
8/6/2020 1107.4
8/5/2020 2917.35
8/4/2020 1237.1
Есть ли способ построить линейный график со всеми транзакциями, которые произошли на этой неделе, по сравнению с предыдущей неделей? Я попытался отфильтровать данные вручную и назначить их новому фрейму данных, который, казалось, работал, но требовал больших затрат на ручное управление. Можно ли было бы использовать today () и заставить его зарегистрировать день выполнения и запустить результаты оттуда? Спасибо!
Ответ №1:
Для этого вам нужно
- реальные
Date
(с использованиемas.Date
), чтобы мы могли обрабатывать их численно (не категориально), и чтобы мы могли разбить их на недели; - используйте
format
для получения недели года каждой даты; и facet_wrap
чтобы мы могли использовать фасеты и иметь разные оси x.
dat$date <- as.Date(dat$date, format = "%m/%d/%Y")
dat$week <- format(dat$date, format = "%V") # or %W
library(ggplot2)
ggplot(dat, aes(date, transaction))
facet_wrap("week", ncol = 1, scales = "free_x")
geom_path()
Комментарии:
1. Классное спасибо! Две последние вещи, как мне ограничить выходные данные отображением только этой и предыдущей недель, если мой набор данных содержит весь год? Могу ли я указать на оси фактический день вместо месяца и числа?
2. Хотя можно утверждать, что «данные отсутствуют» и «нулевое значение» — это две разные вещи … да. В данном случае это может быть вменение, условная замена или несколько других вещей.
3. Чтобы отобразить их оба перекрывающимися без фасетов, вам нужно будет использовать
aes(dayofweek, transacvtion)
(и вам нужно будет определитьdat$dayofweek
).4. Порядок в
ggplot2
всегда выполняется либо (а) в алфавитном порядке, когда значения равныcharacter
; либо (б) в порядке, который вы указываете, когда они равныfactor
.factor(dat$dayofweek, levels=c("Mon","Tue",...))
?5. это то, что я понял впоследствии, спасибо за помощь!