【发布时间】:2014-10-07 12:19:06
【问题描述】:
我有一个数据集,其中 x 轴是日期,但它只是 mm-dd(没有年份)。我使用年份作为组变量,因为我试图在同一图上显示 YOY 变化。 x 轴标签太拥挤,我想限制刻度线标签,以便不显示每个日期。这可能是每隔一天、每隔三天、一周一天——这些都行。
我尝试了一些解决方案,但无法让它们发挥作用,我假设是因为我的 x 轴不是日期,而是一个字符。 (在为 x 轴找到这个 mm-dd 解决方案之前,我尝试使用 yyyy-mm-dd 日期格式绘制 x 轴,但没有成功弄清楚如何让 ggplot2 忽略“yyyy”部分.)
一个例子:
myDF <- data.frame(
myDate = format(seq(as.Date("2014-02-01"),
length=28, by="1 day"), "%m-%d"),
myVar = sample(100,28),
myGroup = sample(2,28,TRUE)
)
head(myDF)
myDate myVar myGroup
02-01 87 1
02-02 34 1
02-03 48 2
02-04 59 1
02-05 98 1
02-06 18 2
ggplot(myDF, aes(myDate, myVar, group=myGroup, color=as.factor(myGroup))) +
geom_line()
我试过了:
ggplot(myDF, aes(myDate, myVar, group=myGroup, color=as.factor(myGroup))) +
geom_line() + scale_x_discrete(breaks = c(1,10,20))
这似乎使 ggplot 感到困惑,因为标签完全消失了。 (与 seq() 尝试的结果相同。)
我也试过了:
ggplot(myDF, aes(myDate, myVar, group=myGroup, color=as.factor(myGroup))) +
geom_line() + scale_x_date(breaks = "1 week")
这会引发错误:myDate not be a Date。
我已经将刻度标签的格式切换为垂直,但是在情节上还是太拥挤了。
任何提示将不胜感激。谢谢!
【问题讨论】:
-
啊。这又是旧的
as.data.frame(cbind(.))错误。cbind强制所有内容。如果你想要日期,那么不要用format强制字符。 -
as.data.frame(cbind(.)) 不在我的原始代码中,它只是为了快速而肮脏的示例。我在我的问题中承认 mm-dd 变量不再是日期,并且我解释了我是如何达到这种格式的。我并不声称这是做事的正确方式——这就是我在这里的原因。
-
如果您花时间阅读了
?scale_x_date的帮助文本,这是您使用的一个函数,那么您会发现几个关于如何“控制标签格式以及[...] 标记的频率”。 -
我确实读过 ?scale_x_date。它需要日期。我的 mm-dd 不是日期。如果您说 mm-dd 可以是日期,请分享您的知识。我的所有研究都让我相信,日期至少需要 ymd。如果您改为说我可以将 scale_x_date() 与 yyyy-mm-dd Date var 一起使用,以便我在同一水平空间中有两行,有效地忽略 yyyy,请也分享您的知识。只有对我不理解的其他一些美学进行额外的调整,它才会在那种情况下相关。
标签: r plot ggplot2 character lubridate