2013-04-17 39 views
3

我正在嘗試開發出現在天氣數據中的天氣情況 - 例如。繪製月度和年度天氣數據r

enter image description here

我想繪製每日價值(儘管平均值在圓圈出現)。我使用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() 

enter image description here

有一個主要的問題在這裏,線路將月之間進行連接。

每個月都繪製到最大值(儘管一個月可以在28結束,在月份留空)。 enter image description here

是否有一個聰明的方法來實現我想達到的目標。我試過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() 

但運行的錯誤: 錯誤:無效的攔截類型:應該是一個數字向量,函數或函數的名稱

如何繪製垂直線與日期?

+0

每年該生產線是繼續這樣我們就可以看到一個月的最後一天之間的趨勢開始 – SHRram

+0

看看這個:http://rgraphgallery.blogspot.com/2013/04/rg82-time-series-plot-weather-data-with.html – jon

回答

3

有一個從latticeExtrapanel.xblocks的解決方案:

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.xblocksxyplotpanel功能很有用:

month <- function(x)format(x, '%m') 
year <- function(x)format(x, '%Y') 

我用year(date1)作爲調節變量產生三個 板。這些面板中的每個面板將顯示 年(panel.xyplot)的時間序列和 交替顏色以突出顯示月份(panel.xblocks)的一系列連續塊。您 應該注意的是,y論點panel.xblocks是 功能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', ...) 
      }) 

xblocks

4

如何做一個日期列,然後刻面同比僅

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) 

enter image description here

你可以添加scales='free_x'到您的情節一樣好,但會發現它使難以解釋。

通過在月份和年份分面,您告訴觀察者和繪圖工具繪製的變量不連續。這是不正確的,因爲你已經在你的問題中指出了。因此,無需刻面......如果需要,您可以爲每個月或每天添加刻度線。

​​

或者你可以提取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() 
+0

+1對於'scales ='free_x' '警告。 –

+0

@Justin謝謝 - 看起來是另一種選擇,在上面 – SHRram

+0

上看到我上面的編輯,在上個月的艱難的寬鬆漂亮的排列。 – Justin