################################################################################ ## Einführung in R ## Modul 3: Einfache Grafiken ################################################################################ ## copyfree, Oktober 2007 ################################################################################ ## Dr. Fränzi Korner-Nievergelt ## oikostat - Statistische Analysen und Beratung ## Ausserdorf 43 ## CH - 6218 Ettiswil ## Tel.: +41 (0) 41 980 49 22 ## fraenzi.korner@oikostat.ch ## www.oikostat.ch ################################################################################ ## Inhalt ################################################################################ ## 1. Datenfile bereitstellen ## 2. Histogramm ## 3. Streudiagramm (Scatterplot) ## 4. Boxplot ## 5. Säulendiagramm ## 6. Glätter ## 1. Daten bereitstellen ################################################################################ ## In den folgenden Codes wird der Beispielsdatensatz erzeugt. Erklärungen ## zu den Codes und zum Arbeiten mit der R-Console finden Sie in Modul 1. nm<-12 # Anzahl Männchen, z.B. Grünfink nw<-14 # Anzahl Weibchen set.seed(2353) # Zufallszahlengenerator einstellen, damit später wieder die gleichen Zufallszahlen generiert werden fluegelm<-round(rnorm(nm, mean=77.8, sd=1.35), digits=1) fluegelw<-round(rnorm(nw, mean=74.6, sd=1.74), digits=1) # Angabe von Mittelwert und Standardabweichung aus Cramp (1994) dat<-data.frame(sex=c(rep("M", nm), rep("W", nw)), fluegel=c(fluegelm, fluegelw)) # Vektoren zu einem Datenfile zusammenstellen dat$sex01<-as.numeric(dat$sex)-1 dat$Alter<-c(rep(3, 8), rep(4, 4), rep(3, 8), rep(4, 6)) # Variable Alter einfügen dat$Alter01<-as.numeric(dat$Alter)-3 set.seed(16523) dat$Gewicht<- -3-0.5*dat$sex01+0.2*dat$Alter01+0.3*dat$fluegel+round(rnorm(length(dat$sex), 0, 0.9), 1) ## 2. Histogramm ################################################################################ hist(dat$fluegel) hist(dat$fluegel, main="Flügellänge", xlab="Flügellänge (mm)", ylab="Häufigkeit", las=1, col="blue", nclass=18) ## 3. Scatterplot, Streudiagramm ################################################################################ # diverse veschiedene Beispiele: plot(dat$fluegel, dat$Gewicht) # Default - Einstellungen plot(dat$fluegel, dat$Gewicht, xlab="Flügellänge (mm)", ylab="Gewicht (g)", main="Grünfink", las=1) # Achsenbeschriftung plot(dat$fluegel, dat$Gewicht, pch=16, xlab="Flügellänge (mm)", ylab="Gewicht (g)", main="Grünfink", las=1) plot(dat$fluegel, dat$Gewicht, pch=16, cex=1.5, xlab="Flügellänge (mm)", ylab="Gewicht (g)", main="Grünfink", las=1) plot(dat$fluegel, dat$Gewicht, col=as.numeric(dat$sex)+3,pch=16, cex=1.5, xlab="Flügellänge (mm)", ylab="Gewicht (g)", main="Grünfink", las=1) legend(77.5, 19, pch=16, cex=1.5, col=c(4,5), legend=c("Männchen", "Weibchen")) abline(lm(Gewicht~fluegel, dat)) # verschiedene Symbole plot(dat$fluegel, dat$Gewicht,pch=dat$sex01+16, cex=1.5, xlab="Flügellänge (mm)", ylab="Gewicht (g)", main="Grünfink", las=1) # Buchstaben anstatt Symbole plot(dat$fluegel, dat$Gewicht,type="n", xlab="Flügellänge (mm)", ylab="Gewicht (g)", main="Grünfink", las=1) text(dat$fluegel, dat$Gewicht, dat$sex) points(dat$fluegel[dat$Alter==4], dat$Gewicht[dat$Alter==4], cex=3.5) # die Adulten werden eingekreist ## 4. Boxplot ################################################################################ boxplot(fluegel~sex, dat, las=1, col=grey(0.5)) boxplot(fluegel~sex+Alter, dat, las=1, col=grey(0.5)) ## 5. Säulendiagramm (Barplots) population<-c(11, 14, 18, 11, 17, 18, 19, 16, 24, 26, 18, 32, 29, 22, 21, 23) # z.B. Mäusebussardpopulationen (Daten nur ungefähr(!) übernommen aus Busche & Kostrzewa (2007) Vogelwarte 209-217 jahr<-c(1966:1981) plot(jahr, population, type="h") # Default-Einstellung plot(jahr, population, lwd=15, lend="butt", type="h", col=grey(0.5)) ## 6. Glätter ################################################################################ mod<-loess(population~jahr) # Lokale Polynomialregression newx<-data.frame(jahr=seq(1966, 1981, by=0.1)) newx$fit<-predict(mod, newx) lines(newx$jahr, newx$fit, lwd=2) mod<-loess(population~jahr, span=0.4) # Im Argument span kann angegeben werden, wie stark geglättet werden soll. newx<-data.frame(jahr=seq(1966, 1981, by=0.1)) newx$fit<-predict(mod, newx) lines(newx$jahr, newx$fit, lwd=2, lty=2) ## Dank ################################################################################ ## Dieses Dokument entstand für einen Einführungskurs in R an der DO-G-Tagung ## vom 29. September - 3. Oktober 2007 in Giessen ## Folgenden Personen danke ich herzlich für die Unterstützung und die Werbung: ## Dr. Ommo Hüppop, Dr. Heiko Schmaljohann, Dr. Wolfgang Fiedler, ## Dr. Thomas Gottschalk, Holger Schielzeth, Dr. Roger Mundry und Dr. Boris Schröder