# # @author: Christian Lutz # @version: 0.1.2 # # Description: Diese Methode wertet die Wetterdaten von einem Monat aus. # und umfasst folgende Daten: # - Temperaturverlauf( Innen und Außen ) # - Regenmenge( Pro Tag ) # # changelog: 0.1.2 # - added preprocessing für fehlende Einträge bei den Regentagen. # # changelog: 0.1.1 # - added jpg output # - added automatic y scale # - added legend # wetter <- function() { ######### Benutzer Einstellungen ################################################ # # # mit source("Pfad/wetter.R") datei laden pfadUndDateiName <- "/Users/christian/Documents/workspace/Wetterdaten/2010_02_raw.csv" monat <- 1 titel <- "Temperaturverlauf und Regenmenge im Januar 2010" outputPUDN <- "/Users/christian/Documents/workspace/Wetterdaten/TR_2010_01.jpg" typ <- "quartz" # Mac # typ <- "Xlib" # Windows / Linux # # ################################################################################# dataset <- read.csv(pfadUndDateiName, TRUE, sep=",", quote="") dataset <- subset(dataset, Month==monat) am <- 24 # Anzahl Messungen pro Tag #remove all columns with only NA's dataset<-dataset[,-which(apply(dataset,2,function(x)all(is.na(x))))] #berechne Regenmenge pro Tag rain <- dataset$RainCount hours <- dataset$Hour sumday <- 0 index <- 1 rainday <- NA # # preprocessing RainCount, falls Datensätze fehlen so werden sie mit bekannten # Werten aufgefüllt, dadurch ergibt sich dann ein Niederschlagsmenge von Null! if( sum(is.na(rain)) > 0 ) { tmp <- NA for( i in 1:(length(rain)) ) { if( !is.na(dataset[i,"RainCount"]) ) { tmp <- dataset[i,"RainCount"] } else { if( !is.na(tmp) ) dataset[i,"RainCount"] <- tmp } } tmp <- NA for( i in (length(rain)):1 ) { if( !is.na(dataset[i,"RainCount"]) ) { tmp <- dataset[i,"RainCount"] } else { if( !is.na(tmp) ) dataset[i,"RainCount"] <- tmp } } } # Regenmenge pro Tag berechnen for( i in 2:(length(rain)) ) { # funktioniert nur bei 24h Eintraegen, bei höherer Frequenz passt es nicht mehr. if( hours[i] == 0 ) { sumday <- 0 } if( dataset[i-1,"RainCount"] < dataset[i,"RainCount"] ) { sumday <- sumday + ( dataset[i,"RainCount"] - dataset[i-1,"RainCount"] ) } # funktioniert nur bei 24h Eintraegen, bei höherer Frequenz passt es nicht mehr. if( hours[i] == 23 ) { rainday[index] <- sumday index <- index + 1 } } #erzeuge Array mit Datum und Uhrzeit z.B. 22.01.2009 datasetdate = paste(dataset$Date,dataset$Month,dataset$Year,sep = ".") dates <- vector("character") last <- "" for( i in 1:length(datasetdate) ) { if( last != datasetdate[i] ) { dates <- c(dates, datasetdate[i]) last <- datasetdate[i] } } #berechne minimalen und maximalen y Wert. ymin <- min(dataset$CH1Temp..degC., na.rm=TRUE) ymax <- max(dataset$CH1Temp..degC., na.rm=TRUE) if( ymin > min(dataset$InTemp..degC.) ) ymin <- min(dataset$InTemp..degC., na.rm=TRUE) if( ymax < max(dataset$InTemp..degC.) ) ymax <- max(dataset$InTemp..degC., na.rm=TRUE) #berechne Scalenhoehe rog <- (max(rainday) - max(rainday) %% 5) + 5 tog <- (ymax - ymax %% 5) + 5 tug <- (ymin - ymin %% 5) #berechne x Abschnitte lin <- seq(am/2, length(datasetdate) - am/2, am) #zeichne Regenmenge jpeg(file=outputPUDN, width=1024, height= 300, type=typ) par(mar=c(5, 4, 4, 4) + 0.1, xpd=TRUE ) barplot(rainday, am, names.arg=dates, axes=FALSE, ylim=c(0,rog), ylab="", xlab="", main=titel) axis(2, ylim=c(0,rog ) ) mtext("Regenmenge in l/qm", side=2, line=2.5) #legende, xy funktioniert so noch nicht richtig! legend(x=300, y=-2, legend=c("Innentemperatur","Aussentemperatur"), text.col=c("blue","red"), pch=c(1,1), col=c("blue","red"), horiz=TRUE) #weiterer Plot hinzufuegen par(new=T) #zeichne Innen und Außentemperatur plot(range(c(1,length(datasetdate))), range(c(ymin,ymax)), type="n", axes=FALSE, ylim=c(tug,tog), ylab="", xlab="") lines(c(1:length(datasetdate)), dataset$CH1Temp..degC., type="l", col="red") lines(c(1:length(datasetdate)), dataset$InTemp..degC., type="l", col="blue") axis(4, ylim=c(tug,tog)) mtext("Temperatur in degC", side=4, line=2.5) dev.off() }