我想用实际日期(实际年份,1997,1998 ... 2010年)绘制这个与时间的关系。日期是原始格式,ala SAS,自1960年以来的日子(因此作为日期转换)。如果我使用as.date将日期转换为变量x,并执行GAM绘图,则会出现错误。它适用于原始数字。但我希望情节显示年份(数据不是等间隔)。
structure(list(site = c(928L, 928L, 928L, 928L, 928L, 928L, 928L,
928L, 928L, 928L, 928L, 928L, 928L, 928L, 928L, 928L, 928L, 928L,
928L, 928L, 928L, 928L, 928L, 928L, 928L, 928L), date = c(13493L,
13534L, 13566L, 13611L, 13723L, 13752L, 13804L, 13837L, 13927L,
14028L, 14082L, 14122L, 14150L, 14182L, 14199L, 16198L, 16279L,
16607L, 16945L, 17545L, 17650L, 17743L, 17868L, 17941L, 18017L,
18092L), y = c(7L, 7L, 17L, 18L, 17L, 17L, 10L, 3L, 17L, 24L,
11L, 5L, 5L, 3L, 5L, 14L, 2L, 9L, 9L, 4L, 7L, 6L, 1L, 0L, 5L,
0L)), .Names = c("site", "date", "y"), class = "data.frame", row.names = c(NA,
-26L))
sgam1 <- gam(sites$y ~ s(sites$date))
sgam <- predict(sgam1, se=TRUE)
plot(sites$date,sites$y,xaxt="n", xlab='Time', ylab='Counts')
x<-as.Date(sites$date, origin="1960-01-01")
axis(1, at=1:26,labels=x)
lines(sites$date,sgam$fit, lty = 1)
lines(sites$date,sgam$fit + 1.96* sgam$se, lty = 2)
lines(sites$date,sgam$fit - 1.96* sgam$se, lty = 2)
ggplot2有一个解决方案(它不介意as.date的东西),但它给了我其他问题......
答案 0 :(得分:0)
使用origin=
as.Date()
参数指定特定的偏移量:
R> as.Date(c(928, 928, 930), origin="1960-01-01")
[1] "1962-07-17" "1962-07-17" "1962-07-19"
R>
如果您的数据具有Date
类型,则可以根据需要选择格式化轴。
答案 1 :(得分:0)
sites <- read.table("349.txt", header = TRUE, sep = "\t", quote="\"", dec=".")
p<-as.Date(sites$date, origin="1960-01-01")
sgam1 <- gam(sites$y ~ s(sites$date))
sgam <- predict(sgam1, se=TRUE)
plot(p,sites$y, xlab='Time', ylab='Counts')
lines(p,sgam$fit, lty = 1)
lines(p,sgam$fit + 1.96* sgam$se, lty = 2)
lines(p,sgam$fit - 1.96* sgam$se, lty = 2)
这有效!