evgenii ershenko evgenii ershenko - 23 days ago 5
R Question

how to plot timeDate using ggplot2 in R?

library(timeDate)
library(ggplot2)
library(ggrepel)

dataset1$TimeStamp <- timeDate(dataset1$TimeStamp, format = "%Y/%m/%d %H:%M:%S", zone = "GMT", FinCenter = "GMT")

p1 <- ggplot(dataset1, aes(x = TimeStamp, y = y1))

p1 +
geom_point() +
geom_text_repel(aes(label = Label1), size = 3)


notice:
when execute code above I see next:
Don't know how to automatically pick scale for object of type timeDate. Defaulting to continuous.
Error: geom_point requires the following missing aesthetics: x

How to use timeDate class in ggplot?

Answer

Probably ggplot doesn't know how to deal with the timeDate class. You can simply plug the values from the @Data slot of your TimeStamp to ggplot:

dataset1 <- data.frame(TimeStamp = sample(1:100,50,replace = T), 
                       y1=sample(1:50,50,replace=T),
                       Label1 = sample(LETTERS[1:5],50,replace=T)
                       )
dataset1$TimeStamp <- timeDate(dataset1$TimeStamp, 
                               format = "%Y/%m/%d %H:%M:%S", 
                               zone = "GMT", 
                               FinCenter = "GMT"
                               )
str(dataset1$TimeStamp)

# Formal class 'timeDate' [package "timeDate"] with 3 slots
# ..@ Data     : POSIXct[1:100], format: "1970-01-01 00:00:09" "1970-01-01 00:00:05" "1970-01-01 00:00:06" ...
# ..@ format   : chr "%Y-%m-%d %H:%M:%S"
# ..@ FinCenter: chr "GMT"

str(dataset1$TimeStamp@Data)

# Dates in POSIXct format are storred in @Data slot
# POSIXct[1:100], format: "1970-01-01 00:00:09" "1970-01-01 00:00:05" "1970-01-01 00:00:06" "1970-01-01 00:00:04" ...

ggplot(dataset1, aes(x = TimeStamp@Data, y = y1, colour = Label1)) +
  geom_point() + 
  geom_text_repel(aes(label = Label1, colour = Label1), size = 3) +
  theme_dark() +
  labs(x="Time Stamp", y = "Value") +
  scale_colour_discrete(guide = F)

enter image description here