ladyLein startpagina

0. R install & library
1. R start
2. Vectoren
(een rij waarden)

3. Matrixen
(tabellen)

4. Statistieken
(min, max, gemiddelde, standaard defiatie)

5. Factoren
(-categorieën/typen)

6. Data frames
(wat is een dataframe,
inlezen txt en csv bestanden)

7. Correlatie in de grafiek
8. Plot
9. GGplot2
(lijn, staaf, taart)

10. Functies
(o.a.if else, for, while, string, datum)

11. SQL / dplyr
(gegevens ophalen uit tabellen)

12. WAR meetkastjes en KNMI
- Locaties meetkastjes
- Data één meetkastje
- Meerdere meetkastjes +tijdreeks
- Waar welke meetkastjes
- KNMI data
- WAR met KNMI data
- Analyse meetkastjes
- Waarnemingen
13. Qgis
gegevens op de kaart zetten



Data van meerdere meetkastjes WAR met KNMI data in één grafiek


Haal de data van meerdere meetkastjes op
Haal de data van het knmi op
Voeg ze samen

Let op: de data van het KNMI loopt een dag achter,
oftewel: gister zit nog niet in de knmi dataset.

Haal de data van meerdere meetkastjes op

# maak een variabele genaamd 'start', met het beginmoment van je grafiek
start<-"2018-07-25,00:00"

# maak een variabele genaamd 'eind', met het eindmoment van je grafiek
end<-"2018-08-10,23:59"

# maak variabele 'ids', met de nummers van de meetkastjes die je wilt bekijken
# voorbeelden: "13", "13,14", "1-50", "1,2,10-20", etc.
ids<-"1-14,16,18-55,57-61,64-65,67,69-70,72-87,89-97,99-105,107-113,115-123,125-128,130-133,139,145,148,173-174,2000-2007,2009-2016,2018,2020,2021" (Amersfoort)
ids<-"11,14,19,26,31,37,41,47" (windroos)
ids<-"67,60,74,22,10" (centrum, west, zuid, noord, oost)

# haal de data op van de server van Meet je Stad
data<-read.table(paste("http://meetjestad.net/data?
type=sensors&start=",start,"&end=",end,"&ids=",ids,"&format=csv",sep=""),sep="\t",header=T,fill=T)

# op de server zijn alle metingen opgeslagen in Universal Time Code. # deze tijd omrekenen naar onze lokale tijd
ts<-as.POSIXct(data$timestamp, origin="1970-01-01", tz="UTC")
data$localtime<-as.POSIXlt(ts, "CET")
attributes(data$localtime)$tzone <- "CET"

# zoek de hoogste en de laagste temperatuur van de opgehaalde datareeks
# we gebruiken het 5e en 95e percentiel van de meetwaarden, en trekken daar 1 (of meer) graad af of tellen het erbij
ylow<-quantile(data$temperature,0.05)-1
yhigh<-quantile(data$temperature,0.95)+1
# wil je wel de pieken en dalen, dan zet je je eigen min en max neer. ylow<-15
yhigh<-45

Haal de data van het KNMI op

# maak een variabele genaamd 'start', met het beginmoment van je grafiek
start<-"2018-07-25,00:00"

# maak een variabele genaamd 'eind', met het eindmoment van je grafiek
end<-"2018-08-10,23:59"

# zet de starttijd en eindtijd om in het formaat van de KNMI API
knmistart<-unlist(strsplit(start, ","))[1]
knmistart<-gsub("-", "", knmistart)
knmiend<-unlist(strsplit(end, ","))[1]
knmiend<-gsub("-", "", knmiend)

# haal temperatuur en luchtvochtigheid data op van het KNMI
knmidata<-read.table(paste("http://projects.knmi.nl/klimatologie/uurgegevens/getdata_uur.cgi?stns=260&vars=T:U&start=",knmistart,"01&end=",knmiend,"24",sep=""), sep=",", header=F)
# voeg kolomnamen toe (in het engels anders kan je ze niet met de WAR meetgegevens samenvoegen)
colnames(knmidata) <- c("station", "day", "hour", "temperature", "humidity")

# mogelijke data van het KNMI om uit te kiezen, of allemaal in één keer
knmidata<-read.table(paste("http://projects.knmi.nl/klimatologie/uurgegevens/getdata_uur.cgi?stns=260&vars=DD:FF:FX:T:U:SQ:DR:R:O:S:P&start=",knmistart,"01&end=",knmiend,"24",sep=""), sep=",", header=F)
colnames(knmidata) <- c("station", "day", "hour", "windrichting", "windsnelheid", "windstoot", "temperature", "humidity", "duurzon","duurneerslag","regenvoorkomend","onweervoorkomend", "sneeuwvoorkomend","luchtdruk")

# zet de KNMI UTC tijd om naar lokale tijd
tsknmi <- as.POSIXct(strptime(paste(knmidata$day,knmidata$hour, sep=""), "%Y%m%d%H"), tz="UTC")

# verschuif de KNMI tijd 30 minuten naar voren,
# omdat de meetwaarden het gemiddelde zijn over het voorgaande uur
knmidata$localtime <- as.POSIXlt(tsknmi, "CET", tz="CET")-30*60
attributes(knmidata$localtime)$tzone <- "CET"

# voeg een kolom toe met het station 'id': knmi
knmidata$id<-rep("knmi",dim(knmidata)[1])

# deel de temperatuur door 10 om dezelfde schaal als MJS te krijgen
knmidata$temperature<- knmidata$temperature/10

Voeg meetkastjes-data en KNMI-data samen

mjsknmidata<-rbind.fill(data, knmidata)

Plot met allemaal opmaak

ggplot(data=mjsknmidata, aes(localtime,temperature, colour = as.factor(id))) +
geom_line(aes(group = as.factor(id)) ) +
geom_line(data=subset(mjsknmidata,id=="knmi"), colour="black", size=1 ) +
ylim(ylow,yhigh) +
scale_x_datetime(breaks = date_breaks("1 days"),labels = date_format("%d/%m/%Y-%H:%m")) +
scale_y_continuous(breaks=seq(15, 45, 5)) +
theme(axis.text.x = element_text(angle = 90, hjust = 1, color = "black", size=15)) +
theme(axis.text.y = element_text(angle = 0, hjust = 1, color = "black", size=15)) +
ggtitle("Hittegolf 2018") + theme(plot.title = element_text(size=20, face="bold", colour="#990000")) +
xlab("datum met tijd") + theme(axis.title.x = element_text(face="bold", colour="#990000", size=15)) +
ylab("temperatuur schaal") + theme(axis.title.y = element_text(face="bold", colour="#990000", size=15))



Met de code colour="black", size=1 wordt de KNMI-lijn zwart en dik.
Het is een aparte lijn dus in de legenda moet je die zelf toevoegen.

Op deze manier kan je net zoveel lijnen toevoegen als je zelf wilt.
Allemaal aan elkaar gezet met +

Met date_breaks("1 days") kan je aangeven hoe de x-as de datums weergeeft.
1 dan wordt elke dag weergegeven, bv bij een week. 15 dan wordt er om de 15 dagen de datum neergezet, bv bij een jaar.

Met breaks=seq(15, 45, 5) geef je de waarden op de y-as aan. 15 is de minimum temperatuur, 45 is de maximum temperatuur en 5 zijn de stappen.

Met ggtitle kan je de titel opgeven en daarna de layout daarvan.

Terug naar top