J'approchèrent cela en utilisant le paquet xts
, mais trouve qu'il ne propose pas de plancher le temps. Par conséquent, je conclus lubridate
pour être plus pratique ici, aussi parce que ggplot
ne comprend pas xts
objets tout de suite. Les deux packages vous aident à transformer les données de temps de plusieurs façons.
Utilisez xts::align.time
ou lubridate::floor_date
pour passer votre temps à l'heure/heure/heure suivante/précédente.
Dans les deux cas, vous regroupez les données avant de les transmettre à ggplot. Vous pouvez utiliser sum
pour résumer tta
, ou simplement utiliser length
pour compter le nombre d'occurrences, mais dans ce dernier cas, vous pouvez également utiliser geom_histogram
sur la série temporelle uniquement. Vous pouvez déplacer les barres avec précaution dans ggplot
avec position_nudge
pour représenter une période plutôt que de rester assis centré sur un point de temps. Vous devez spécifier scale_x_time(labels = ..., breaks = ...)
dans l'intrigue.
données:
time <- c(
"08:20:00",
"21:30:00",
"22:00:00",
"22:30:00",
"00:25:00",
"17:00:00"
)
time <- as.POSIXct(time, format = "%H:%M:%S")
tta <- c(1, 5, 1, 1, 1, 5)
En utilisant xts
:
library(xts)
myxts <- xts(tta, order.by = time)
myxts_aligned <- align.time(myxts, n = 60*60*2) # shifts all times to the next full
# 2 hours
myxts_agg <- period.apply(myxts_aligned,
INDEX = endpoints(myxts, "hours", 2),
FUN = sum) # sums up every two hours
require(ggplot2)
ggplot(mapping = aes(x = index(myxts_agg), y = myxts_agg[, 1])) +
geom_bar(stat = "identity",
width = 60*60*2, # one bar to be 2 hours wide
position = position_nudge(x = -60*60), # shift one hour to the left
# so that the bar represents the actual period
colour = "black") +
scale_x_time(labels = function(x) strftime(x, "%H:%M"),
breaks = index(myxts_agg)) + # add more breaks manually if you like
scale_y_continuous() # to escape the warning of ggplot not knowing
# how to deal with xts object
En utilisant lubridate
:
require(lubridate)
require(tidyverse)
mydf <- data.frame(time = time, tta = tta)
mydf_agg <-
mydf %>%
group_by(time = floor_date(time, "2 hours")) %>%
summarise(tta_sum = sum(tta), tta_freq = n())
ggplot(mydf_agg, aes(x = time, y = tta_sum)) +
geom_bar(stat = "identity",
width = 60*60*2, # one bar to be 2 hours wide
position = position_nudge(x = 60*60), # shift one hour to the *right*
# so that the bar represents the actual period
colour = "black") +
scale_x_time(labels = function(x) strftime(x, "%H:%M"),
breaks = mydf_agg$time) # add more breaks manually if you like
Après tout, allmost même:
Alors, quelle est votre question? Qu'avez-vous essayé? – user3640617
Q: comment tracer la fréquence de tta en utilisant les données de temps pour chaque intervalle de deux heures –