当x轴为mm-dd时,使用ggplot2编辑轴刻度标签

Sam*_*tha 1 plot r character ggplot2 lubridate

我有一个数据集,其中x轴是一个日期,但它只是mm-dd(没有年份).我使用year作为组变量,因为我试图在同一个情节上显示同样的变化.x轴标签太拥挤,我想限制刻度线标签,以便不显示每个日期.这可能是隔天,每隔三天,每周一天 - 其中任何一个都可行.

我已经尝试了一些解决方案,但无法让它们工作,我假设因为我的x轴不是Date,而是一个角色.(在获得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() 
Run Code Online (Sandbox Code Playgroud)

这里的一切都是正确的,除了刻度标签过于挤压.

我试过了:

ggplot(myDF, aes(myDate, myVar, group=myGroup, color=as.factor(myGroup))) +   
geom_line() + scale_x_discrete(breaks = c(1,10,20))
Run Code Online (Sandbox Code Playgroud)

这似乎会混淆ggplot,因为标签完全消失了.(与seq()尝试的结果相同.)

我也尝试过:

ggplot(myDF, aes(myDate, myVar, group=myGroup, color=as.factor(myGroup))) + 
geom_line() + scale_x_date(breaks = "1 week")
Run Code Online (Sandbox Code Playgroud)

这会引发错误:myDate不是Date.

我已经将刻度标签的格式切换为垂直格式,但它仍然过于拥挤.

任何提示将非常感谢.谢谢!

Did*_*rts 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)])
Run Code Online (Sandbox Code Playgroud)