12.15 日历图
airquality 数据集记录了1973年5月至9月纽约的空气质量,包括气温(华氏度)、风速(米/小时)、紫外线强度、臭氧含量四个指标,图 12.54 展示了每日的气温变化。
%>%
airquality transform(Date = seq.Date(
from = as.Date("1973-05-01"),
to = as.Date("1973-09-30"), by = "day"
%>%
)) transform(
Week = as.integer(format(Date, "%W")),
Year = as.integer(format(Date, "%Y")),
Weekdays = factor(weekdays(Date, abbreviate = T),
levels = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
)%>%
) ggplot(aes(x = Week, y = Weekdays, fill = Temp)) +
scale_fill_distiller(name = "Temp (F)", palette = "Spectral") +
geom_tile(color = "white", size = 0.4) +
facet_wrap("Year", ncol = 1) +
scale_x_continuous(
expand = c(0, 0),
breaks = seq(1, 52, length = 12),
labels = month.abb
)
图 12.54 横轴的刻度标签换成了月份,一个月为四周,一年 52~53 周,每周的第一天约定为星期一,1973年05月01日为星期二。代码中颇为技巧的在于 format()
函数从 Date 日期类型的数据提取第几周, 用 weekdays()
函数提取星期几,而 month.abb 则是一个内置常量,12个月份的英文缩写。在调用其它 R 包处理日期数据时要特别小心,要留意一周的的第一天是星期几,有的是星期一,有的是星期日,这往往和宗教信仰相关,星期日在西方也叫礼拜天。 上面 Base R 提供的日期函数认为一周的第一天是星期一,而调用 data.table 的话,默认一周是从星期日(礼拜天)开始的。
# https://d.cosx.org/d/421230
weekdays(Sys.Date(), abbreviate = TRUE)
## [1] "Thu"
::wday(Sys.Date()) data.table
## [1] 5