参考自《R Graphics Cookbook》
将日期格式的数据映射给坐标轴,尤其是需要设计时间序列的变化时。
在ggplot2中可以处理两类时间格式的数据:1.Date(精确到天的) 2.POSIXt(可以精确到秒)。
library(ggplot2)
library(gcookbook)
#查看本节需要的数据
economics
#查看数据中的data变量的格式:时间格式/Date
str(economics)
一、基本制图,横坐标为时间格式的数据
ggplot(economics, aes(x = date, y = psavert)) +
geom_line()
二、调整日期坐标轴的间隔
library(dplyr)
#选择部分时间段内的数据
econ_mod <- economics %>%
filter(date >= as.Date("1992-05-01") & date < as.Date("1993-06-01"))
#底图,自动生成的间隔
econ_plot <- ggplot(econ_mod, aes(x = date, y = psavert)) +
geom_line()
#展示底图
econ_plot
#提前将想要的间隔格式保存,使用seq语句;显示间隔为每2月
datebreaks <- seq(as.Date("1992-06-01"), as.Date("1993-06-01"),
by = "2 month")
#在地图上设置间隔和坐标轴刻度标签为斜体
econ_plot +
scale_x_date(breaks = datebreaks) + #注意设置时间格式的标度是使用scale_x_data语法
theme(axis.text.x = element_text(angle = 30, hjust = 1))
#但是格式又和默认的不同了,显示了天,但实际上映射数据中根本没有天这个级别
三、继续调整格式
#要想调整为只有年和月的格式,需要使用scales包中的data_format函数,比如调整格式为"%Y %b"(年和月), 调整其他格式需要查找相应的标签格式。
library(scales)
econ_plot +
scale_x_date(breaks = datebreaks,
labels = date_format("%Y %b")) +
theme(axis.text.x = element_text(angle = 30, hjust = 1))
四、补充:计算机的区域设置导致中英文效果的问题
因为一些参数默认依赖于计算机的区域设置,比如上部分的参数"%b",在设置时间为中国的计算机上,就会显示为"12月",而不是"Dec", 此时要转换格式需使用Sys.seltocale()语法
#比如设置为美国的区域设置
Sys.setlocale("LC_TIME", "US")
#重新做上图,格式就发生了响应的转换
五、总结
本节针对将时间格式的数据映射给坐标轴、并实现按需展示的要求。达到满意效果有点麻烦,毕竟ggplot2需要每一步都要设置,哪里照顾不到就会出问题达不到要求!ggplot2作图虽好,可不要贪多啊!