使用scale_x_date指定第一个和最后一个刻度线

jas*_*ing 14 r ggplot2

我希望能够指定出现在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))
Run Code Online (Sandbox Code Playgroud)

请注意,日期向量中的最小日期是2011-11-21,最大日期是2012-11-23,并且我已指定了图的限制.然而,情节似乎扩大了一些.

有没有办法强制第一个和最后一个刻度线对应于指定的实际限制scale_x_date

谢谢!

Did*_*rts 17

为了确保轴没有展开,你可以添加参数expand = c(0, 0)scale_x_date().

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

UPDATE

如果您需要以最小和最大日期开头的标记,那么您可以定义自己的休息时间.为此,我制作了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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • @jason.p.pickering 如果您设置 Breaks="4 周",则无法获得 2012-11-23 的最后一个刻度,因为此日期与第一个日期之间的差异不是 4 周乘以某物。如果您想同时观看这两个日期,那么您必须自己休息。 (2认同)