Grafiken I

Verteilungs- und Streudiagramme


Exploration von Verteilungen

In diesem Kapitel geben wir Ihnen einen Überblick zur grafischen Exploration von Verteilungen.

Quellcode als Script / Daten

Stamm-Blatt-Diagramme

Script

# Einfaches Stamm-Blatt-Diagramm
stem(bsp01$IQ)

Console

The decimal point is 1 digit(s) to the right of the |
  5 | 8
  6 | 7
  7 | 33556689999
  8 | 1223334455666678
  9 | 00122344455556788889
 10 | 0000111111223344445555566
 11 | 01113346666688889
 12 | 113479
 13 | 38
 14 |
 15 | 1

Script

# Laden des Package aplpack: Das Package muss vorher installiert sein.
library(aplpack)
stem.leaf.backback(IQ_maenner, IQ_frauen, m=1)

Console

1 | 2: represents 12, leaf unit: 1
          IQ_maenner     IQ_frauen
____________________________________________________
1                  8|  5 |
                    |  6 |7                        1
4                996|  7 |33556899                 9
8               6632|  8 |123344556678            21
21     9886555432210|  9 |0445788                 (7)
(9)        665544431| 10 |0000111112234555        30
12            888311| 11 |01346666689             14
6                431| 12 |179                      3
3                 83| 13 |
                    | 14 |
____________________________________________________
HI: 151
n:                42      58
____________________________________________________

Balkendiagramm

Script

# Ein einfaches Balkendiagramm für die 
# Häufigkeitsverteilung des Geschlechts.
barplot(table(bsp01$sex))

Script

# Farbdefinition für Web-Grafiken
my_blue <- rgb(11,83,148, maxColorValue=255)
my_blue2 <- rgb(207,226,234, maxColorValue=255)
my_red <- rgb(166,77,121, maxColorValue=255)
my_red2 <- rgb(234,209,220, maxColorValue=255)
my_green <- rgb(39,78,19, maxColorValue=255)

# Balkendiagramm mit der Definition einiger Argumente
barplot(
# das table-Objekt als Grundlage für das Diagramm
table(bsp01$sex),
# main bezeichnet den Titel
main="Geschlechterverteilung",
# xlab bezeichnet die x-Achse
xlab="Geschlecht"
# ylab bezeichnet die y-Achse
ylab="absolute Häufigkeit",
# names.arg definiert die Bezeichnungen der jeweiligen Gruppen
names.arg=c("Frauen", "Männer"),
# ylim gibt die Länge der y-Achse vom Minimum bis zum Maximum an
ylim=c(0,60),
# space Einheiten zwischen den Balken
space=0,
# width Einheiten der Balkenbreite im 
# zugrundeliegenden Koordinatensystem
width=1,
# col Farbgebung: bei zwei Balken, zwei Farbwerte
col=c(my_red, my_blue)
)

Script

# Erstellung zweidimensionaler Balkendiagramme
attach(pedersen)
barplot(table(sex, desired),beside=TRUE, horiz=T,
xlab="Wie viele Sexualpartner wünschen Sie sich in den
nächsten 30 Jahren?", ylab="Häufigkeit der Antworten", cex.names=.5)

Script

# Anzeige der Dimensionen und Kategorien des Datensatzes Titanic
library(datasets)
dimnames(Titanic)

Console

$Class
[1] "1st" "2nd" "3rd" "Crew"
$Sex
[1] "Male" "Female"
$Age
[1] "Child" "Adult"
$Survived
[1] "No" "Yes"

Script

# Auswahl der Teiltabellen für das Geschlecht (2) und das Überleben (4)
margin.table(Titanic, c(2,4))

Console

Survived
Sex No Yes
Male 1364 367
Female 126 344

Script

# Zweidimensionales Häufigkeitsdiagramm mit absoluter Häufigkeit
barplot(sex_surv,
ylab="absolute Häufigkeit", xlab="Überleben", beside=T,
names.arg=c("Nein", "Ja"), main="Absolute Häufigkeit",
col=c(my_blue, my_red))
# Erstellung einer Legende
legend("topright", legend=c("Männer", "Frauen"), fill=c(my_blue, my_red))

Punktdiagramm

Script

# Punktdiagramm mit Hilfslinien
dotchart(as.table(sort(state.x77[,1])[40:50]),xlab="Anzahl der Einwohner x 1000",
main="Bevölkerungsreichste US-Bundesstaaten 1977")

Histogramme

Script

# Einfaches Histogramm
hist(x=bsp01$IQ, main="Histogramm für Häufigkeiten", ylab="Häufigkeit", xlab="IQ")

Script

# Histogramm mit unterschiedlicher Intervallbreite
# Definition der Intervallgrenzen
br <- c(50,65,75,80,85,90,95,100,105,110,115,120,130,160)
# Zeichnung des Histogramms und Speicherung der Histogrammparameter in h
h <- hist(bsp01$IQ,
#Angabe der Intervallgrenzen definiert in br
breaks=br, freq=T, cex.main=.8, ylab="Häufigkeit",
main="Histogramm mit ungleichen Intervallen\nund Häufigkeitswerten"
)
# Code für die Datenbeschriftung
B <- NULL
for (i in 1:13) B[i] <- mean(c(br[i],br[i+1]))
text(B, h$count, labels=as.character(h$count), pos=1, cex=.5, offset=.2)

Boxplots

Script

# Einfaches Boxplot
boxplot(Stress~AZ, ylab="Stresserleben", xlab="Arbeitszufriedenheit",
names=c("sehr gering", "gering", "mittel", "hoch", "sehr hoch"))

Script

# Boxplots mit Kerben für verschiedene Gruppen
boxplot(Stress~AZ, ylab="Stresserleben", xlab="Arbeitszufriedenheit",
names=c("(1) sehr gering", "(2) gering", "(3) mittel", "(4) hoch",
"(5) sehr hoch"), notch=TRUE, cex.axis=.9)

Violinplot

Script

# Violinplot
library(vioplot)
vioplot(IQ_maenner, IQ_frauen, col=my_blue,
names=c("Männer", "Frauen")
)

Streudiagramme

Script

# Streudiagramm für Körpergröße und IQ
plot(x=height, y=IQ, xlab="Körpergröße in cm", ylab="IQ-Punkte")
Plot

Streudiagramm mit Regressionsgerade

Script

# Berechnung der Koeffizienten der linearen Regression
lm(formula=fussball$tore~fussball$spiele)

Console

Call:
lm(formula = fussball$tore ~ fussball$spiele)
Coefficients:
(Intercept) fussball$spiele
2.1280 0.4774

Script

# Zeichnung des Streudiagram
plot(fussball$spiele, fussball$tore,
 ylab="Anzahl geschossener Tore", xlab="Anzahl
 gespielter Spiele")
# Hinzufügen der Regressionsgerade in das 
# Streudiagamm
abline(lm(fussball$tore~fussball$spiele))


Streudiagramm mit Loess-Kurve

Script

#Zeichnen der Loess-Kurve mit normalverteilter 
# Gewichtungsfunktion (diese Gewichtung
# wird standardmäßig mit der 
# Funktion scatter.smooth genutzt) mit einem Anteil
# einbezogener Daten von 70% (span=.7)

scatter.smooth(
 bsp02$income, bsp02$life_expectancy,   
 ylab="Lebenserwartung in Jahren",
 xlab="Durchschnittliches pro Kopf Jahreseinkommen in 
 USD", span=.7
)

Verwendung der Potenzleiter

Script

#Transformation mit dem natürlichen Logarithmus
log_income <- log(bsp02$income)
scatter.smooth(
 log_income, bsp02$life_expectancy, span=(2/3), 
 xaxt="n", ylab="Lebenserwartung in Jahren",
 xlab="Durchschnittliches pro Kopf Jahreseinkommen in  
 USD")
# x-Achse in Originaleinheiten
axis(1, at = 5:11, labels = round(exp(5:11)))

Streudiagramm bei Overplotting

Script

# Zufallsrauschen
plot(jitter(bsp01$AZ),jitter(bsp01$LZ),
ylab="Lebenszufriedenheit", xlab="Arbeitszufriedenheit")

Script

# Sonnenblumendiagramm
sunflowerplot(bsp01$AZ,bsp01$LZ, ylab="Lebenszufriedenheit",
xlab="Arbeitszufriedenheit")
# die Legende haben wir nachträglich hinzugefügt
text(1,2, " 1 Wert", cex=.7, pos=4); text(1,1, " 4 Werte", cex=.7, pos=4)
text(2,4, " 3 Werte", cex=.7, pos=4); text(2,3, " 11 Werte", cex=.7, pos=4)
text(2,2, " 5 Werte", cex=.7, pos=4)

Streudiagramm-Matrix

Script

# Streudiagramm-Matrix mit Loess-Kurven
pairs(bsp01[,3:6], panel=panel.smooth, col.smooth="black", span=c(2/3), lwd=2)

Streudiagramme mit 3 Variablen

Script

# Dreidimensionales Streudiagramm für Stress, Lebens- und Arbeitszufriedenheit
library(scatterplot3d)
scatterplot3d(jitter(bsp01$Stress),jitter(bsp01$LZ),jitter(bsp01$AZ),
xlab="Stresserleben",
ylab="Lebenszufriedenheit",
zlab="Arbeitszufriedenheit",
type="h")

Script

# Bubbleplot mit dem Paket: googleVis
bubble<- gvisBubbleChart(
 data=jitter_bsp, idvar="no", xvar="AZ", yvar="LZ",
 colorvar="Stress",sizevar="Stress",
 options=list(width=500, height=500,
 hAxis='{minValue:0, maxValue:5,   
  title:"Arbeitszufriedenheit"}',
 vAxis='{minValue:0, maxValue:5, 
  title: "Lebenszufriedenheit"}',
 sizeAxis='{minSize:1, maxSize:9}',
 legend='{position:"none"}',
 bubble='{stroke:"black", textStyle:{color:"none"}}',
 colorAxis='{colors:["grey", "grey"], legend:  
  {position:"none"}}')
)
plot(bubble)

Script

# Streudiagramm für Drittvariable mit Symbolen
plot(jitter(bsp01$Stress),jitter(bsp01$AZ),
# Dritte Variable als Symbol
pch=bsp01$LZ,
# x-Achse nur für die bessere Sichtbarkeit der Legende verändert
xlim=c(3,11),
cex.main=.8,
xlab="Stresserleben",
ylab="Arbeitszufriedenheit")
# Hinzufügen der Legende
legend("topright", pch=1:5, legend=c("LZ=1","LZ=2","LZ=3","LZ=4","LZ=5"))