Formatting dates with scale_x_date in ggplot2

91,945

Solution 1

With the new ggplot2 v 2.0.0, a way to do it is :

scale_x_date(date_breaks = "1 month", date_minor_breaks = "1 week",
             date_labels = "%B")

Solution 2

Nevermind, the answer was to use the version found in the documentation,

scale_x_date(breaks = "1 month", minor_breaks = "1 week", labels=date_format("%B")) +

And to include library(scales) as the documentation says.

Share:
91,945
Mittenchops
Author by

Mittenchops

Updated on January 16, 2020

Comments

  • Mittenchops
    Mittenchops over 4 years

    In a previous version of ggplot2, I was able to use one of the two following commands to format my x dates: Either

    scale_x_date(breaks = "1 month", minor_breaks = "1 week", labels=(date_format="%B")) +
    

    or

    scale_x_date(major="months", minor="weeks", format="%B") +
    

    to produce "%B" format, of full month name.

    (I'm afraid I can no longer distinguish which one worked, because they were both commented out.)

    I don't recall when, but after updating either R or ggplot in an ubuntu 12.04 upgrade, this no longer worked for me. Now, the very same data produces the error:

    Error in scale_labels.continuous(scale) : 
      Breaks and labels are different lengths
    

    With the first, and

    Error in continuous_scale(aesthetics, "date", identity, breaks = breaks,  : 
      unused argument(s) (major = "months", minor = "weeks", format = "%B")
    

    With the second.

    If I remove the labels= argument, and apply

    scale_x_date(breaks = "1 month", minor_breaks = "1 week") +
    

    it produces a date format of "YYYY-MM-DD" on the first of each month.

    Consulting with the help for function ?scale_x_date, I've also tried the following:

    scale_x_date(breaks = "1 month", minor_breaks = "1 week", labels=date_format("%B")) +
    

    But this produces this error:

    Error in structure(list(call = match.call(), aesthetics = aesthetics,  : 
      could not find function "date_format"
    

    How can I achieve month-name "%B" formatting on my x axis? (If you have any additional insights into the mechanics producing these error messages, I'd also appreciate it.)

  • Eric Fail
    Eric Fail almost 12 years
    You should consider recognizing this as an complete answer and close this thread.
  • drmariod
    drmariod over 7 years
    Maybe updating the parameters to date_break and date_minor_break since the new ggplot2 version...
  • Mittenchops
    Mittenchops over 7 years
    correct @drmariod, it seems the API has changed again and my answer is no longer valid (though the advice to use the version found is the documentation is still good!). I'll recognize YCR's answer as now correct, if I can revise...
  • Mittenchops
    Mittenchops over 7 years
    My answer below is now out of date. This has the right params.
  • Rafael
    Rafael about 4 years
    Hi, I need to order months in a different way, like month.abb[c(7:12, 1:6)]. Any hint? ¡Thanks!
  • Andrew
    Andrew over 3 years
    Works good, but how to show only short names like : Jan, Feb, Mar, ... ?
  • YCR
    YCR over 3 years
    It is controlled by date_labels. Use the list in the strptime function to fit your requirements: rdocumentation.org/packages/base/versions/3.6.2/topics/strpt‌​ime. For abbreviate months, it is %b