ggplot2中的自定义日期轴

时间:2019-02-09 19:07:37

标签: r ggplot2

我正在尝试在ggplot2中生成带有自定义刻度的图。问题是如果我选择例如date_breaks = "5 years",该图将在最后一个日期年份开始标注,并每隔5年返回一次,但在第一个日期错过。这是有道理的,但是如果我也想显示第一个日期,以便人们看到我的情节的开始怎么办?此外,未显示中间的刻度线。 所以我想拥有的是:

  • 每5年间隔一次,每个都带有标签(例如,假设在1988年带有标签),并且还标在轴上
  • 1年间没有标记的年份标记(例如,如果我们假设1988年标记,则1989年至1992年应仅在刻度上标记刻度线,而不标记)
  • 标签的自定义开始日期和标签的自定义结束日期。现在当然,如果数字不在5年的序列中,那么两者都不可能。在这种情况下,决定自定义开始/结束日期并从那里进行标签可能很有意义。让我知道您认为在这种情况下最好的解决方案。

MWE:

set.seed(1)
test <- data.table(x = rnorm(29*2),var=c(rep("x1",29),rep("x2",29)),
                   time=rep(seq(as.Date("1983/12/31"),as.Date("2011/12/31"), "year"),2))
library(ggplot2);library(scales)
ggplot(data=test,aes(x=time, y=x, colour=var)) + 
geom_line() + scale_x_date(date_labels="%Y",date_breaks = "5 years",
                             date_minor_breaks="1 year")

1 个答案:

答案 0 :(得分:0)

您可以手动定义中断和标签,可以随意调整。

dts <- as.Date(paste0(seq(1980, 2015, 1), "-01-01"))
x.labs <- substr(as.character(dts), 1, 4)
x.labs[5:length(dts - 2) %% 5 != 0] <- ""  # modulo 5

library(ggplot2);library(scales)
ggplot(data=test, aes(x=time, y=x, colour=var)) + 
  geom_line() + 
  scale_x_date(breaks=dts, labels=x.labs)

屈服

enter image description here