Временная метка на оси х в временных рядах ggplot - PullRequest
0 голосов
/ 28 января 2019

У меня есть данные измерений за прошлые месяцы:

enter image description here

Переменные

 x <- df$DatoTid
 y <- df$Partikler
 color <- df$Opgave

Я пытаюсь построить свой графикданные основаны на метке времени, так что у меня есть часы дня по оси x вместо конкретной даты-времени POSIXct.Я хотел бы, чтобы метки и отметки оси X были бы fx "00:00", "01:00", ... "24:00".Так что полдень находится в середине оси X.

До сих пор я пытался преобразовать значения даты и времени в символы.Выглядит не очень хорошо (как вы можете видеть, галочки на оси и метки исчезли. Возможно, и другие вещи не так).

Может кто-нибудь помочь мне?И, пожалуйста, дайте мне знать, как загрузить данные для вас.Я не знаю, как добавить огромный .csv-файл ....

enter image description here

# Rounding up to nearest 10 min: 
head(df)
df$Tid2 <- format(strptime("1970-01-01", "%Y-%m-%d", tz="CET") + 
round(as.numeric(df$DatoTid)/300)*300 + 3600, "%Y-%m-%d %H:%M:%S")
head(df)
df$Tid2 <- as.character(df$Tid2)
str(df)

x <- df$Tid2
y <- df$Partikler
color <- df$Opgave

plot2 <- ggplot(data = df, aes(x = x, y = y, color = color)) +
  geom_point(shape=16, alpha=0.6, size=1.8) +
  scale_y_continuous(labels=function(x) format(x, big.mark = ".", decimal.mark = ",", scientific = FALSE)) +
  scale_x_discrete(breaks=c("00:00:00", "06:00:00", "09:00:00", "12:00:00", "18:00:00", "21:00:00")) +
  scale_color_discrete(name = "Case") +
  xlab(" ") +
  ylab(expression(paste("Partikelkoncentration [pt/cc]"))) +
  myTheme + 
  theme(legend.text=element_text(size=8), legend.title=element_text(size=8))
plot2

1 Ответ

0 голосов
/ 28 января 2019

Я бы подошел к этому, сделав новую отметку времени, которая использует один день, но часы / минуты / секунды вашей существующей отметки времени.

Во-первых, вот готовая версия ваших данных,здесь с использованием линейного тренда в Partikler:

library(tidyverse); library(lubridate)
df <- data_frame(Tid2 = seq.POSIXt(from = ymd_h(2019010100), 
                                   to = ymd_h(2019011500), by = 60*60),
                 Partikler = seq(from = 0, to = 2.5E5, along.with = Tid2),
                 Opgave = as.factor(floor_date(Tid2, "3 days")))

# Here's a plot that's structurally similar to yours:
ggplot(df, aes(Tid2, Partikler, col = Opgave)) + 
  geom_point() +
  scale_color_discrete(name = "Case")

enter image description here

Теперь, если мы изменим метки времени на один и тот же день, мы можемКонтролируйте их, как обычно, в ggplot, но с ними рухнул один день.Мы также можем изменить ось x, чтобы она не упоминала компонент даты метки времени:

df2 <- df %>%
  mutate(Tid2_sameday = ymd_hms(paste(Sys.Date(), 
                                      hour(Tid2), minute(Tid2), second(Tid2))))


ggplot(df2, aes(Tid2_sameday, Partikler, col = Opgave)) + 
  geom_point() +
  scale_color_discrete(name = "Case")  +
  scale_x_datetime(date_labels = "%H:%M")

enter image description here

...