我正在寻找一种方法来强制ggplot
上的日期标签从(看似)逻辑时间开始。我已经遇到过多次这个问题,但我目前的问题是我希望休息时间在01/01/yyyy
我的数据是一个包含POSIXct Date列的大型数据集,在Flow列中绘制的数据以及Site列中的多个站点名称。
library(ggplot2)
library(scales)
ggplot(AllFlowData, aes(x=Date, y = Flow, colour = Site))+geom_line()+
scale_x_datetime(date_breaks = "1 year", expand =c(0,0),labels=date_format("%Y"))
我可以强制每年休息一次,如果没有labels=date_format("%Y")
(每年01/01开始)它们看起来没问题,但如果我包括labels=date_format("%Y")
(因为有10年的数据,所以变得有点凌乱)日期标签转移到〜11月,1989年是第一个标签,即使我的数据始于01/01/1990。
我过去曾经在不同的时间步骤多次遇到过这个问题,例如想要强制它到月的第一天,或者每天都是在午夜而不是在白天。有没有通用的方法来做到这一点?
我看过create specific date range in ggplot2 ( scale_x_date),但我不想对我的休息时间进行硬编码,因为我有一些与不同日期范围有关的情节。
由于
答案 0 :(得分:2)
如果日期来自你的矢量:
dates <- seq.Date(as.Date("2001-03-04"), as.Date("2001-11-04"), by="day")
## "2001-03-04" "2001-03-05" "2001-03-06" ... "2001-11-03" "2001-11-04"
使用pretty.Dates()
对终点进行最佳猜测。
range(pretty(dates))
## "2001-01-01" "2002-01-01"
然后将此范围传递给ggplot。
但是,我建议使用coord_cartesian()
而不是scale_x_date()
。通常我想裁剪图形边界,而不是完全排除这些值(这可能搞乱像黄土摘要这样的东西)。