我想创建一个2012年和2013年夏季气温的时间序列图。
唯一的问题是我希望数据系列在另一个上面绘制一个,这样就可以轻松地比较它们而不是沿着日期轴顺序地进行比较。
temp <- c(22, 22, 26, 23, 18, 20, 18, 17)
date <- as.Date(c("2012-06-01", "2012-07-01","2012-08-01","2012-09-01","2013-06-01","2013-07-01","2013-08-01","2013-09-01"))
year <- as.factor(c("2012", "2012", "2012", "2012","2013", "2013","2013","2013"))
df<- data.frame(temp, date, year)
这是我到目前为止使用ggplot2
require(ggplot2)
ggplot(df, aes(date, temp, color=year))+
geom_point()
图表并不需要在x轴上列出完整的日期,事实上,它应该只有月和日,这可能会解决问题,即
df$dayMo <- c("07-01", "07-02","07-03","07-04","07-01","07-02","07-03","07-04")
我没有找到让as.Date
或as.POSIXct
(strptime
)允许这种日月格式的方法。
我也可以采取其他一些创造性的方式来完成这项工作。有什么想法吗?
答案 0 :(得分:1)
如果您的基础数据集是临时数据和日期,那么这可以避免操纵原始数据框:
ggplot(df) +
geom_point(aes(x=strftime(date,format="%m-%d"),
y=temp,
color=strftime(date,format="%Y")), size=3)+
scale_color_discrete(name="Year")+
labs(x="date")
编辑(对OP&#39评论的回应)。
因此,这将上述方法与Henrik相结合,使用日期而不是x轴的char,并避免修改原始df。
library(ggplot2)
ggplot(df) +
geom_point(aes(x=as.Date(paste(2014,strftime(date,format="%m-%d"),sep="-")),
y=temp,
color=strftime(date,format="%Y")), size=3)+
scale_color_discrete(name="Year")+
labs(x="date")
答案 1 :(得分:1)
另一种可能性是创建一个假日期,其中一年与原始“日期”的月份和日期连接在一起。类Date
的x变量很容易使用scale_x_date
格式化。加载scales
包以访问漂亮的中断和格式化函数:labels = date_format()
; breaks = date_breaks()
。有关其他日期格式,请参阅strptime
。
library(scales)
df$date2 <- as.Date(paste(2014, format(date, "%m-%d"), sep = "-"))
ggplot(df, aes(date2, temp, color = year)) +
geom_point() +
scale_x_date(labels = date_format("%m/%d"))
ggplot(df, aes(date2, temp, color=year)) +
geom_point() +
scale_x_date(labels = date_format("%b-%d"),
breaks = date_breaks("months"))
答案 2 :(得分:0)
如果你想在同一个地块上绘制两年的年份,那么使用dayMo
作为你的x值(它们不一定是date
个对象)。
df$dayMo<-c("06-01", "07-01","08-01","09-01","06-01", "07-01","08-01","09-01")
ggplot(df, aes(dayMo, temp, color=year))+
geom_point()