Problems with changing the date scale on an axis

Hey guys,

I have the following data.frame

date     ratio
 1992-1    0.5
 1992-1    0.6
 1992-1    0.5
 1992-2    0.7
 1992-2    0.65
 1992-2    0.65

and I try to run the following code to create a graph

occratiocomb <- ggplot() +
  # blue plot
  geom_line(data=SKILL_1_OCC_FINAL, aes(x=Date, y=ratio_1occ_comb, group = 1, colour="very low")) + 
  geom_smooth(data=SKILL_1_OCC_FINAL, aes(x=Date, y=ratio_1occ_comb), method = loess, fill="red",
              colour="red", size=1) + theme(axis.text.x=element_text(angle=60, hjust=1))


# PROBLEM
occratiocomb + scale_x_date(date_breaks = "1 year", date_labels = "%Y")
print(occratiocomb)

The x axis (date) of my graph is looking terrible since I have monthly data as well as it shows a period of 30 years. The thing I try to do now is to change the date scale from a scale based on months to one based on years. Unfortunately, if I try to run the code the error date_trans works with objects of class Date only, is displayed. In my opinion, this is weird because my date column is already in a date format. Or is the issue related to the fact that my date variable does not contain any days?

Many thanks in advance
Xx
Freddy

Yes, that is exactly why. scale_x_date() can only be used with date variables and you have a character variable instead, please see this example:

library(tidyverse)

sample_df <- data.frame(
  stringsAsFactors = FALSE,
              date = c("1992-1","1992-1","1992-1",
                       "1992-2","1992-2","1992-2"),
             ratio = c(0.5, 0.6, 0.5, 0.7, 0.65, 0.65)
)

sample_df %>%
    mutate(date = as.Date(paste0(date, "-1"))) %>% 
    ggplot(aes(x = date, y = ratio)) +
    geom_line(aes(group = 1, colour="very low")) + 
    geom_smooth(method = loess, fill = "red", colour = "red", size = 1) +
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    theme(axis.text.x = element_text(angle = 60, hjust = 1))

Created on 2021-02-18 by the reprex package (v1.0.0)

Note: Next time please provide a proper REPRoducible EXample (reprex) illustrating your issue.

2 Likes

Thanks for your help!
My problem was that it have not recognized my variable Date as a date variable.
The following code fixed it. sample_df$Date <- zoo::as.Date(zoo::as.yearmon(sample_df$Date))

Many thanks anyway

1 Like