Обработка даты и времени для графика расхода воды в реке

Я загрузил данные о расходе реки с правительственного веб-сайта, они отформатировали данные даты и времени следующим образом , пожалуйста, смотрите формат .

Это мой код

library(ggplot2)
ggplot(CHEM_RESULTS, aes(x= `Date and Time`, y=`Discharge (cumec)`,  group = 1)) +
  geom_line( color = "powderblue", size=1, alpha=0.9, linetype=1)

Я создал этот график , посмотрите график .

ПРИМЕР ДАННЫХ:

head(CHEM_RESULTS)

Date and Time
<chr>
Discharge (cumec)
<dbl>
2024-03-05T00:00:01.000+10:00   3.202           
2024-03-05T00:35:01.000+10:00   3.124           
2024-03-05T01:00:01.000+10:00   3.040           
2024-03-05T01:30:01.000+10:00   2.956           
2024-03-05T02:00:01.000+10:00   2.919           
2024-03-05T03:00:01.000+10:00   2.867   

Я думаю, что из-за того, что формат даты и времени очень длинный и содержит так много записей (1896), он создает полосу на оси X, а не отображает данные. Я не думаю, что все данные должны быть показаны, но некоторые точки даты/времени необходимы для обеспечения контекста. Я думаю, что может быть сложно переформатировать способ предоставления правительством данных о дате и времени, опять же, учитывая количество записей.

Мне нужно наложить на график другие данные о качестве воды, например. pH в 4 местах и ​​в 4 разных периодах времени. Как только я помещу эти точки на график, они будут выделены? поскольку это было бы полезно для предоставления только необходимой информации о дате и времени.

любая помощь о том, как подойти к этому, очень ценится.

Спасибо !

попытался построить линейный график расхода воды в реке, получив полосу по оси X вместо отображения отметок времени.

Возможно, попробуйте преобразовать вектор символов Date and Time в формат даты и времени R. Например с: lubridate::ymd_hms(sub("\\.000\\+10\\.00", "", Date and Time))

missuse 18.05.2024 06:05

Вам необходимо преобразовать столбец «Дата и время» из символьной строки в объект даты и времени. См. справку по as.POSIXct() и strptime().

Dave2e 18.05.2024 06:07

@Dave2e, эй, большое спасибо, я попробовал это: strptime(CHEM_RESULTS$Дата и время,"%Y/%m/%e/%y/%Z", tz = "") код запустился, но я не уверен, правильно ли я его отформатировал, так как под графиком все еще появляется квадрат. Спасибо!

Rosie Lomas 19.05.2024 01:27

У вас неверный формат, в столбце есть - и нет/также нужно учитывать букву «Т». Могут быть и другие ошибки. Также вам необходимо вернуть результат в столбец «Дата и время». Если вы отредактируете вопрос и добавите образец своих данных. dput(head(CHEM_RESULTS)) было бы проще помочь.

Dave2e 19.05.2024 01:49

Спасибо @Dave2e, я изменил на «-». Я не уверен, как учитывать «T», мне ввести его в формат? Я добавил заголовок своих данных, разряд — это измерение справа, оно только что отформатировалось странно при переполнении стека. Большое спасибо за вашу помощь !

Rosie Lomas 19.05.2024 05:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пожалуйста, обновите соответствующий часовой пояс.

CHEM_RESULTS <- structure(list(`Date and Time` = c("2024-03-05T00:00:01.000+10:00", 
                             "2024-03-05T00:35:01.000+10:00", "2024-03-05T01:00:01.000+10:00", 
                             "2024-03-05T01:30:01.000+10:00", "2024-03-05T02:00:01.000+10:00", 
                             "2024-03-05T03:00:01.000+10:00"), 
     `Discharge (cumec)` = c(3.202, 3.124, 3.04, 2.956, 2.919, 2.867)), 
      class = "data.frame", row.names = c(NA, -6L))


CHEM_RESULTS$`Date and Time`<- as.POSIXct(CHEM_RESULTS$`Date and Time`, "%Y-%m-%dT%H:%M:%S", tz = "Etc/GMT-10")

ggplot(CHEM_RESULTS, aes(x= `Date and Time`, y=`Discharge (cumec)`,  group = 1)) +
        geom_line( color = "powderblue", size=1, alpha=0.9, linetype=1)
Ответ принят как подходящий

Я создал аналогичную структуру данных для станции Монжан в период с 01.01.2022 по 31.12.2023 (источник: GRDC).

Первые строки (head(data)):

# A tibble: 6 × 2
  `Date and Time`               `Discharge (cumec)`
  <chr>                                       <dbl>
1 2022-01-02T09:00:00.000+10:00               1928.
2 2022-01-03T09:00:00.000+10:00               2042.
3 2022-01-04T09:00:00.000+10:00               2161.
4 2022-01-05T09:00:00.000+10:00               2274.
5 2022-01-06T09:00:00.000+10:00               2227.
6 2022-01-07T09:00:00.000+10:00               2052.

Чтобы воспроизвести вашу ошибку:

### Packages
library(dplyr)
library(lubridate)
library(ggplot2)

### Plot the graph without specifying breaks for the abscissa axis
ggplot(data, aes(x= `Date and Time`, y=`Discharge (cumec)`, group = 1)) +
  geom_line(color = "powderblue", linewidth=1, alpha=0.9, linetype=1)

Выход :

Чтобы исправить это :

### Transform the first column to POSIX time :
data=data %>%
 mutate(`Date and Time`=ymd_hms(`Date and Time`,tz = "Etc/GMT-10"))

### Plot the graph with ggplot2 with `scale_x_date_time` and `date_breaks`
ggplot(data, aes(x= `Date and Time`, y=`Discharge (cumec)`, group = 1)) +
  scale_x_datetime(date_breaks = "3 months", date_labels = "%b %Y",limits = c(min(data$`Date and Time`), max(data$`Date and Time`)), expand = c(0, 0)) +
  geom_line(color = "powderblue", linewidth=1, alpha=0.9, linetype=1)

Выход :

Другие вопросы по теме