1

我有一个数据集,其中 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 不是日期。

我已经将刻度标签的格式切换为垂直,但它在情节上仍然太拥挤。

任何提示将不胜感激。谢谢!

4

1 回答 1

6

如果您想使用myDate没有年份的变量(作为字符),那么一种解决方案是使用scale_x_discrete()然后提供myDF$myDate作为breaks=参数并选择要显示的值序列。在这个例子中,我选择了每 7 个值。

ggplot(myDF, aes(myDate, myVar, group=myGroup, color=as.factor(myGroup))) +   
      geom_line() + scale_x_discrete(breaks = unique(myDF$myDate)[seq(1,28,7)])
于 2014-08-14T16:40:01.610 回答