Как отметили Geosopher и PoGibas, вы должны убедиться, что ggplot понимает, что датум является датой. Вы можете рассмотреть пакет lubridate
.
Если я кослюсь, я думаю, что ваша дата указана в одном столбце как YYYY-MM, поэтому для этого вам просто нужно что-то вроде:
date_df <- existing_df %>%
mutate(Datum = paste0(Datum, "-01")) %>%
mutate(Datum = lubridate::ymd(Datum))
Я извлек следующий пример кода из главы lubridate
из R для Data Science (свободно доступна онлайн) , в которой объясняется, как это сделать, когда элементы даты и времени разделены на различные столбцы. , используя функцию lubridate::make_datetime
. Это также показывает, что вы можете напрямую построить переменную даты и времени, и ggplot сделает все правильно.
library(tidyverse)
library(lubridate)
library(nycflights13) # Dataset with flight details
# Custom function to transform the date and time information from several columns
# into one "date-time" column. You may be able to get away simply with make_datetime
make_datetime_100 <- function(year, month, day, time) {
make_datetime(year, month, day, time %/% 100, time %% 100)
}
# Apply that function to relevant columns in the dataset
flights_dt <- flights %>%
filter(!is.na(dep_time), !is.na(arr_time)) %>%
mutate(
dep_time = make_datetime_100(year, month, day, dep_time),
arr_time = make_datetime_100(year, month, day, arr_time),
sched_dep_time = make_datetime_100(year, month, day, sched_dep_time),
sched_arr_time = make_datetime_100(year, month, day, sched_arr_time)
) %>%
select(origin, dest, ends_with("delay"), ends_with("time"))
# Plot the dataset
flights_dt %>%
ggplot(aes(dep_time)) +
geom_freqpoly(binwidth = 86400) # 86400 seconds = 1 day