Sar*_*rah 4 datetime r date ggplot2 posixct
我正在寻找一种方法来强制 a 上的日期标签从ggplot(看似)逻辑时间开始。我已经多次遇到这个问题,但我当前的问题是我希望在“我01/01/yyyy
的数据是一个大型数据集”上进行中断,其中包含 POSIXct 日期列、要在“流量”列中绘制的数据以及“站点”列中的多个站点名称。
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"))
Run Code Online (Sandbox Code Playgroud)
我可以强制每年都有休息时间,如果没有labels=date_format("%Y")(每年 01/01 开始),它们看起来还不错,但如果我包括labels=date_format("%Y")(因为有 10 年的数据,所以有点混乱),日期标签会移至 ~11 月,尽管我的数据从 01/01/1990 开始,但 1989 是第一个标签。
过去,我在不同的时间步长上多次遇到过这个问题,例如想要将其强制到该月的 1 号或每天的午夜而不是白天。有没有通用的方法来做到这一点?
我已经研究过在 ggplot2 (scale_x_date) 中创建特定的日期范围,但我不想对我的中断进行硬编码,因为我有相当多的图与不同的日期范围有关。
谢谢
如果日期以如下向量形式出现:
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"
Run Code Online (Sandbox Code Playgroud)
用于pretty.Dates()对终点做出最佳猜测。
range(pretty(dates))
## "2001-01-01" "2002-01-01"
Run Code Online (Sandbox Code Playgroud)
然后将此范围传递给 ggplot。
不过,我建议coord_cartesian()不要使用scale_x_date(). 通常,我想裁剪图形边界,而不是完全排除这些值(这可能会弄乱黄土摘要等内容)。