使用ggplot2中的scale_x_date格式化日期

77
在早期版本的ggplot2中,我能够使用以下两个命令之一来格式化我的x轴日期: 要么
scale_x_date(breaks = "1 month", minor_breaks = "1 week", labels=(date_format="%B")) +
或者
scale_x_date(major="months", minor="weeks", format="%B") +

生成"%B"格式,代表完整的月份名称。

很抱歉我已经无法区分哪个方法起作用了,因为它们都被注释掉了。

我不记得是什么时候,在Ubuntu 12.04升级之后更新了R或ggplot之后,这个方法对我不再起作用。现在,相同的数据会产生错误:

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

使用第一个,并且

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

加入第二个。

如果我删除 labels= 参数,并应用

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

每个月的第一天会生成“YYYY-MM-DD”格式的日期。

查看函数?scale_x_date的帮助后,我也尝试了以下操作:

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

但是这会产生以下错误:

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

如何在我的x轴上实现月份名称的"%B"格式?(如果您对产生这些错误消息的机制有任何其他见解,我也会感激不尽。)


3
ggplot2 0.9.0有许多重要变化。请查看转换指南以帮助您快速了解这些变化。 - joran
2个回答

113

使用新的ggplot2 v 2.0.0,实现方法如下:

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

7
我的下面回答现在已经过期了。这个有正确的参数。 - Mittenchops
嗨,我需要以不同的方式排序月份,例如month.abb[c(7:12, 1:6)]。有什么提示吗?谢谢! - Rafael
工作得很好,但如何仅显示短名称,例如:Jan、Feb、Mar等? - Andrew
它由 date_labels 控制。使用 strptime 函数中的列表来满足您的要求:https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/strptime。对于缩写月份,它是 %b。 - YCR

69

不用管了,答案是使用文档中找到的版本。

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

按照文档所说,需要包含library(scales)


3
你应该考虑将这个回答视为完整的答案并关闭这个帖子。 - Eric Fail
1
也许需要更新 date_breakdate_minor_break 参数,因为新的 ggplot2 版本... - drmariod
正确的@drmariod,看起来API又改变了,我的答案不再有效(尽管使用文档中找到的版本仍然是好建议!)。如果我可以修改,我会认可YCR的答案为正确的。 - Mittenchops

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接