ChatGPT解决这个技术问题 Extra ChatGPT

Formatting dates with scale_x_date in ggplot2

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.)

There were many significant changes in ggplot 0.9.0. You will find the transition guide very helpful in getting up to speed.

d
dfrankow

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")

My answer below is now out of date. This has the right params.
Hi, I need to order months in a different way, like month.abb[c(7:12, 1:6)]. Any hint? ¡Thanks!
Works good, but how to show only short names like : Jan, Feb, Mar, ... ?
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/strptime. For abbreviate months, it is %b
T
TylerH

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.


You should consider recognizing this as an complete answer and close this thread.
Maybe updating the parameters to date_break and date_minor_break since the new ggplot2 version...
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...