Rmd

Multiple Grafiken (viele Einzelgrafiken in einer Gesamtgrafik)

Mehrere Möglichkeiten: Grafik in völlig unabhängige Einzelgrafiken unterteilen mit jeweils eigenen Befehlen oder Befehle, die bereits mehrere Einzelgrafiken erstellen.

# Beispiel für multiple Scatterplots mit pairs
# read data
# pairs.data <- read.delim("http://www.psych.uni-goettingen.de/mat/pairs.dat")
require(tidyverse)
## Loading required package: tidyverse
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.3     ✓ purrr   0.3.4
## ✓ tibble  3.1.0     ✓ dplyr   1.0.5
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
dd <-tibble(
  subj = as.factor(c(1,2,3,4,5, 6)),
  grp  = c("T", "C", "T", "C", "T", "C"),
  x.c    = c(11, 12, 13, 14, 15, 16),
  m1   = c( 2,  0,  5,  4,  7, 8),
  m2   = c( 6,  2,  7, 12,  9, 11),
  m3   = c( 9,  7,  8, 14,  11, 15),
  m4   = c( 10,  8,  9, 15,  12, 16),
)


# und multiplen Scatterplot ausgeben lassen über die 4 Messungen
pairs(dd[c("m1", "m2", "m3", "m4")])

Die Zeichenfläche wird aufgeteilt und jeder Grafikaufruf erfolgt in einem neuen Feld. Die beiden unterschiedlichen Parameter legen die Schreibreihenfolge fest. ‘mfrow’ (erst alle Spalten in Zeile füllen, dann nächste Zeile) und ’mfcol (erst alle Zeilen einer Spalte füllen, dann nächste Spalte)

# read data
#pairs.data <- read.delim("http://www.psych.uni-goettingen.de/mat/pairs.dat")
dd <-tibble(
  subj = as.factor(c(1,2,3,4,5, 6)),
  grp  = c("T", "C", "T", "C", "T", "C"),
  x.c    = c(11, 12, 13, 14, 15, 16),
  m1   = c( 2,  0,  5,  4,  7, 8),
  m2   = c( 6,  2,  7, 12,  9, 11),
  m3   = c( 9,  7,  8, 14,  11, 15),
  m4   = c( 10,  8,  9, 15,  12, 16),
)
# Zeilenweises Auffüllen, 3 Spalten, 2 Zeilen
par(mfrow = c(2, 3))
# und die Fenster füllen
plot(dd$m1, dd$m2)
plot(dd$m1, dd$m3)
plot(dd$m1, dd$m4)
hist(dd$m2)
hist(dd$m3)
hist(dd$m4)

Die Matrix (erster Parameter) legt die Reihenfolge fest, in der die Teilfenster gezeichnet werden. Wird hier ‘byrow’ auf True gesetzt, entspricht die Reihenfolge der Teilgrafiken der normalen Leserichtung. Daher wird im unteren Beispiel als erstes der Teilbereich links unten gezeichnet, dann der Bereich links oben, dann rechts unten. Rechts oben bleibt frei (=0).

Der zweite Parameter legt die Größenverhältnisse für die Spalten fest. Im Beispiel ist die linke Spalte doppelt so breit wie die rechte. Der dritte Parameter macht dasselbe für die Zeilen. Die oberen Abbildungen sind halb so groß wie die unteren im Beispiel.

dd <- readr::read_tsv("http://md.psych.bio.uni-goettingen.de/mv/data/be/car-data.txt")
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   sex = col_double(),
##   age = col_double(),
##   extro = col_double(),
##   time = col_double()
## )
dd$sex<-factor(dd$sex,levels=c(0,1), labels=c("Female","Male"))
# Aufteilung der Zeichenfläche in mehrere unabhängige Teilflächen
# layout
# Beipiel Fig. 2.21 aus Everitt (2010)
#data car cleaning
#sex<-c(1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,1)
#age<-c(55,43,57,26,22,32,26,29,40,30,34,44,49,22,34,47,48,48,22,24,50,49,49,48,29,58,24,21,29,45,28,37,44,22,38,24,34,26,26,25)
#extro<-c(40,45,52,62,31,28,2,83,55,32,47,45,60,13,7,85,38,61,26,3,29,60,47,18,16,36,24,12,32,46,26,40,46,44,3,25,43,41,42,36)
#time<-c(46,79,33,63,20,18,11,97,63,46,21,71,59,44,30,80,45,26,33,7,50,54,73,19,36,31,71,15,40,61,45,42,57,34,26,47,42,44,59,27)
#sex<-factor(sex,levels=c(0,1), labels=c("Female","Male"))

nf<-layout(matrix(c(2,0,1,3),  # Inhalt der vier Zellen die die Matrix bilden, legt die Zeichenreihenfolge fest
                  2,           # Anzahl der Zeilen in der zu generierenden Matrix
                  2,           # Anzahl der Spalten in der zu generierenden Matrix
                  byrow=TRUE), # die Spalten laufen schneller. Daher wird die 0 in die zweite Spalte der ersten Zeile geschrieben. 
                               # Default: byrow=F Zeilen laufen schneller. Die 0 würde in die zweite Zeile erste Spalte geschrieben.
           c(2,1),             # die linke Spalte ist doppelt so breit wie die rechte
           c(1,2),             # die untere Zeile ist doppelt so hoch wie die obere
           TRUE)
psymb<-as.numeric(dd$sex)
plot(dd$time~dd$extro,pch=psymb,ylim=c(10,115),xlab="Extroversion score",
ylab="Time looking after car (mins)")
abline(lm(dd$time[dd$sex=="Female"] ~ dd$extro[dd$sex=="Female"]),lty=1)
abline(lm(dd$time[dd$sex=="Male"] ~ dd$extro[dd$sex=="Male"]),lty=2)
legend("topright",legend=levels(dd$sex),pch=c(1,2))
legend("topleft",legend=levels(dd$sex),lty=1:2)
hist(dd$extro,ylab="Frequency",xlab="Extroversion",main="")
boxplot(dd$time)

Weitere Möglichkeiten bietet der Befehl ‘split.screen’

Version: 22 April, 2021 21:15