日期刻度轴的首尾刻度线规范化

30

我想要在由ggplot2生成的图中指定第一个和最后一个刻度标记,但是遇到了一些问题。这是一些代码。

#Produce a vector of days 
dateVec <- seq(from = as.Date("2011-11-21"), to = as.Date("2012-11-23"), by = "days")

#Some random values
myData <- rnorm(length(dateVec))

# Plot it
qplot(dateVec, myData) + 
    scale_x_date(breaks = "4 weeks", limits = c(min(dateVec), max=max(dateVec))) + 
    theme(axis.text.x = element_text(size = 10, angle = 45, colour = "black",
          vjust = 1, hjust = 1))

请注意日期向量中的最小日期为2011-11-21,最大日期为2012-11-23,我已指定图表的范围。然而,图表似乎被扩展了一些。

是否有办法强制第一个和最后一个刻度线对应于在 scale_x_date 中指定的实际极限?

谢谢!

1个回答

35
为确保轴不被扩展,您可以在scale_x_date()中添加参数expand = c(0, 0)
qplot(dateVec, myData) + 
scale_x_date(breaks = "4 weeks", limits = c(min(dateVec), max = max(dateVec)),
             expand=c(0,0)) +  
theme(axis.text.x  = element_text(size = 10, angle = 45, colour = "black",
      vjust = 1, hjust = 1))

enter image description here

更新

如果您需要以最小和最大日期开头的刻度线,则可以定义自己的间隔。为此,我创建了一个向量break.vec,其中包含最小和最大日期以及它们之间每个月的日期。然后使用此向量在scale_x_date()中设置间隔。

break.vec <- c(as.Date("2011-11-21"),
               seq(from = as.Date("2011-12-01"), to = as.Date("2012-11-01"),
                 by = "month"),
               as.Date("2012-11-23"))

qplot(dateVec, myData) + 
  scale_x_date(breaks = break.vec) +  
  theme(axis.text.x = element_text(size = 10, angle = 45, colour = "black",
                                   vjust = 1, hjust = 1))

这里输入图片描述


1
谢谢。我也尝试过了,但仍然无法得到我想要的结果。我更关心最后一个刻度线是否出现在max(dateVec)处。你可以看到在这个例子中,最后一个刻度线出现在2012-11-19,但不是dateVec向量中的最后一个值。??? - jason.p.pickering
2
如果你设置了breaks="4 weeks",你将无法得到最后一个刻度为2012-11-23,因为这个日期和第一个日期之间的差距不是4周的倍数。如果你想看到这两个日期,那么你就需要自己设置breaks。 - Didzis Elferts

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