在r中绘制月度和年度天气数据
我正试图开发一个天气图,就像出现在天气数据中的那样——类似于 我想绘制每日值(尽管平均值可以出现在圆圈中)。我正在使用ggplot2,因为它需要多方面的(每个月和每年) 我试着用这个来画线:在r中绘制月度和年度天气数据,r,plot,ggplot2,lattice,R,Plot,Ggplot2,Lattice,我正试图开发一个天气图,就像出现在天气数据中的那样——类似于 我想绘制每日值(尽管平均值可以出现在圆圈中)。我正在使用ggplot2,因为它需要多方面的(每个月和每年) 我试着用这个来画线: qplot(date, avgtm, data = myd, geom = "line", col = "red") + facet_wrap(~year, scales='free_x', ncol=1, nrow=3) + geom_vline(xintercept=td, linetyp
qplot(date, avgtm, data = myd, geom = "line", col = "red") +
facet_wrap(~year, scales='free_x', ncol=1, nrow=3) +
geom_vline(xintercept=td, linetype="dotted") + theme_bw()
但是运行一个错误:
错误:无效的截取类型:应为数字向量、函数或函数名
如何绘制带有日期的垂直线 制作一个日期栏,然后只在年份上刻面怎么样
myd$date <- as.Date(paste(myd$year, myd$month, myd$day), format='%Y %b %d')
qplot(date, avgtm, data = myd, geom = "line", col = "red") +
facet_wrap(~year, scales='free_x', ncol=1, nrow=3)
或者,您可以提取一年中的某一天
并在一个绘图上绘制所有内容,按年份着色:
myd$doy <- format(myd$date, '%j')
p <- ggplot(myd, aes(x=doy, y=avgtm, color=year, group=year))
p + geom_line()
有一种解决方案,使用
latticeExtra中的面板.xblock
:
st <- as.Date("2009-1-1")
en <- as.Date("2011-12-28")
date1 <- seq(st, en, "1 day")
avgtm <- round (rnorm (length(date1), 50,5), 1)
myd <- data.frame(date1, avgtm)
我使用year(date1)
作为条件变量来生成三个
面板。每个面板都将显示该时间序列
年份(panel.xyplot
)和具有
交替颜色以突出显示月份(panel.xblock
)。你
请注意,panel.xblocks
中的y
参数是
以前定义的功能<代码>月份代码>:
xyplot(avgtm ~ date1 | year(date1), data=myd,
type='l', layout=c(1, 3),
scales=list(x=list(relation='free')),
xlab='', ylab='',
panel=function(x, y, ...){
panel.xblocks(x, month,
col = c("lightgray", "white"),
border = "darkgray")
panel.xyplot(x, y, lwd = 1, col='black', ...)
})
每年的路线都是继续的,这样我们就可以看到从每月最后一天到连续一个月的开始之间的趋势。看看这个:@Justin Thank-似乎是一个替代性的,在top@Justin感谢justin的解决方案和建议,我们可以在月底添加垂直线,为了让我们更清楚地了解月份,请使用library(scales)
为每月解决方案添加文本标签。否则,您可以摆弄主题\u bw
或使用geom\u hline
绘制线条。。。但我建议使用主题选项。错误告诉你,它需要是数字向量,而不是日期。。。这就是为什么我建议使用主题
,而不是尝试自己画线。(添加一行,如主题(panel.grid.major=element\u行(color='blue'))
)。然后看一下主题
myd$doy <- format(myd$date, '%j')
p <- ggplot(myd, aes(x=doy, y=avgtm, color=year, group=year))
p + geom_line()
p + geom_smooth()
st <- as.Date("2009-1-1")
en <- as.Date("2011-12-28")
date1 <- seq(st, en, "1 day")
avgtm <- round (rnorm (length(date1), 50,5), 1)
myd <- data.frame(date1, avgtm)
month <- function(x)format(x, '%m')
year <- function(x)format(x, '%Y')
xyplot(avgtm ~ date1 | year(date1), data=myd,
type='l', layout=c(1, 3),
scales=list(x=list(relation='free')),
xlab='', ylab='',
panel=function(x, y, ...){
panel.xblocks(x, month,
col = c("lightgray", "white"),
border = "darkgray")
panel.xyplot(x, y, lwd = 1, col='black', ...)
})