[英]plotting monthly and yearwise weather data in r
我正在嘗試開發天氣數據中出現的天氣情節 - 類似於。
我想繪制每日價值(雖然平均值可以出現在圓圈中)。 我正在使用ggplot2因為它需要多方面(每個月和每年)。
st <- as.Date ("2009-1-1")
en <- as.Date ("2011-12-28")
date1 <- seq(st, en, "1 day")
year <- format(date1, "%Y")
month <- format (date1, "%b")
day <- as.numeric (format(date1, "%d"))
avgtm <- round (rnorm (length(date1), 50,5), 1)
maxtm <- avgtm + abs(rnorm (length (avgtm), 0, 5))
mintm <- avgtm - abs(rnorm (length (avgtm), 0, 5))
myd <- data.frame ( year, month, day, avgtm, maxtm, mintm)
require(ggplot2)
qplot(day, avgtm, data = myd, geom = "line", col = "red") +
facet_grid(year ~ month) + theme_bw()
這里有一個主要問題,線路將在幾個月之間連接。
每個月被繪制為最大值(盡管一個月可以在28個月結束,在該月留空)。
有沒有一種聰明的方法來實現我想要實現的目標。 我試過ggplot2,但可能還有其他不錯的選擇。
編輯:
我試圖在月的第一天添加垂直線以標記月份。 這是我試圖找到每月的第一天:
td = as.Date (seq(as.Date("2009/1/1"), as.Date("2011/12/28"), "months"))
我試着用它來繪制線條:
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)
您也可以將scales='free_x'
添加到您的繪圖中,但會發現它會使解釋變得困難。
通過在月份和年份上進行分面,您告訴觀察者和繪圖工具,繪制的變量不是連續的。 這是不正確的,正如您在問題中指出的那樣。 因此,沒有刻面......如果需要,您可以為每個月或每天添加刻度線。
library(scales)
qplot(date, avgtm, data = myd, geom = "line", col = "red") +
facet_wrap(~year, scales='free_x', ncol=1, nrow=3) +
scale_x_date(breaks=date_breaks("month"), labels=date_format("%b"))
或者,您可以提取day of year
並在一個地塊上繪制所有內容,按年份着色:
myd$doy <- format(myd$date, '%j')
p <- ggplot(myd, aes(x=doy, y=avgtm, color=year, group=year))
p + geom_line()
要么
p + geom_smooth()
有一個解決方案panel.xblocks
從latticeExtra
:
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)
我定義了兩個函數來提取月份和年份值,而不是將它們包含在data.frame
。 這種方法對panel.xblocks
panel
函數中的xyplot
非常有用:
month <- function(x)format(x, '%m')
year <- function(x)format(x, '%Y')
我使用year(date1)
作為條件變量來生成三個面板。 這些面板中的每一個都將顯示該年的時間序列( panel.xyplot
)和一系列具有交替顏色的連續塊以突出顯示月份( panel.xblocks
)。 您應該注意panel.xblocks
中的y
參數是先前定義的函數month
:
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', ...)
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.