簡體   English   中英

繪制r中的月度和年度天氣數據

[英]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.xblockslatticeExtra

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM