Я загрузил данные о расходе реки с правительственного веб-сайта, они отформатировали данные даты и времени следующим образом , пожалуйста, смотрите формат .
Это мой код
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 вместо отображения отметок времени.
Вам необходимо преобразовать столбец «Дата и время» из символьной строки в объект даты и времени. См. справку по as.POSIXct() и strptime().
@Dave2e, эй, большое спасибо, я попробовал это: strptime(CHEM_RESULTS$Дата и время,"%Y/%m/%e/%y/%Z", tz = "") код запустился, но я не уверен, правильно ли я его отформатировал, так как под графиком все еще появляется квадрат. Спасибо!
У вас неверный формат, в столбце есть - и нет/также нужно учитывать букву «Т». Могут быть и другие ошибки. Также вам необходимо вернуть результат в столбец «Дата и время». Если вы отредактируете вопрос и добавите образец своих данных. dput(head(CHEM_RESULTS)) было бы проще помочь.
Спасибо @Dave2e, я изменил на «-». Я не уверен, как учитывать «T», мне ввести его в формат? Я добавил заголовок своих данных, разряд — это измерение справа, оно только что отформатировалось странно при переполнении стека. Большое спасибо за вашу помощь !





Пожалуйста, обновите соответствующий часовой пояс.
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)
Выход :
Возможно, попробуйте преобразовать вектор символов
Date and Timeв формат даты и времени R. Например с:lubridate::ymd_hms(sub("\\.000\\+10\\.00", "", Date and Time))