Mit dem ggplot2-Package lassen sich verschiedene Plots miteinander kombinieren. So bietet z.B. eine Kombination von Box- und Jitter Plot die Möglichkeit, in einer Graphik sowohl basale Verteilungsmerkmale (Median, Quartile etc.) als auch die Verteilung der Werte selbst darzustellen. Darüber hinaus lassen sich auch sogenannte Cut-Off-Werte darstellen.
In diesem Tutorial zeige ich, wie man mit dem ggplot2-Package Box- mit sogenannten Jitter Plots kombiniert.
Zunächst erstellen wir drei Zufallsvariablen (var.scale, var.group, var.cutoff) mit jeweils 300 Fällen. Die Variable var.scale ist eine metrische Variable und hat einen WerteBereich von 0 bis 101, die Variable var.group ist eine Faktorvariable und enthält die Gruppen male und female. Die dritte Variable wurde auf Grundlage der var.scale-Variable mit vorher festgelegten Cut-Off-Werten berechnet. Dabei entsprecht der Wertebereich 0 – 40 der Kategorie low, der Wertebereich 41 – 60 der Kategorie medium und der Wertebereich > 60 der Kategorie high.
set.seed(1111)
var.scale <- round(rnorm(300, 50, 17))
var.group <- rbinom(300, 1, .5)
var.group <- factor(var.group,
levels = c(0:1),
labels = c("male", "female"))
var.cutoff <- ifelse(var.scale <= 40, 1,
ifelse(var.scale > 40 & var.scale <= 60, 2, 3))
var.cutoff <- factor(var.cutoff,
levels = c(3:1),
labels = c("high", "medium", "low"))
Mit der describe()-Funktion aus dem Hmisc-Package lassen sich die Verteilungen dieser variablen anzeigen.
library(Hmisc)
describe(var.scale)
## var.scale ## n missing unique Info Mean .05 .10 .25 .50 ## 300 0 76 1 52.18 24.00 28.90 41.00 51.00 ## .75 .90 .95 ## 65.00 75.00 80.05 ## ## lowest : 0 13 15 16 19, highest: 91 92 93 94 101
describe(var.group)
## var.group ## n missing unique ## 300 0 2 ## ## male (142, 47%), female (158, 53%)
describe(var.cutoff)
## var.cutoff ## n missing unique ## 300 0 3 ## ## high (98, 33%), medium (129, 43%), low (73, 24%)
Im letzten Vorbereitungsschritt verknüpfen wir die soeben generierten Variablen mit der data.frame()-Funktion zu einem Dataframe, den wir df nennen. Dieser Schritt ist notwendig, da das im Folgenden verwendete Graphikpaket ggplot2 nur mit in einem Dataframe gespeicherten Daten funktioniert.
df <- data.frame(var.scale, var.cutoff, var.group)
Im Folgenden werden mit den Funktionen xlab(), ylab() und ggtitle() Labels für die X- und Y-Achse sowie ein Titel vergeben.
Die beiden Boxplots werden mit der Funktion geom_boxplot() aufgerufen, mit der Eigenschaft width wird die Breite der Plots spezifiziert.
Mit der Funktion geom_jitter() werden die Jitter Plots aufgerufen. Auch diese Funktion wird durch die Angabe verschiedener Eigenschaften (colour, position, size etc.) näher bestimmt.
library(ggplot2)
ggplot(df) +
xlab("Group") +
ylab("Scale") +
ggtitle("Combination of Box and Jitter Plot") +
geom_boxplot(aes(var.group, var.scale),
width=0.5) +
geom_jitter(aes(var.group, var.scale, colour = var.cutoff),
position = position_jitter(width = .15, height=-0.7),
size=2) +
scale_y_continuous(limits=c(0, 101),
breaks = seq(0, 110, 10)) +
scale_color_manual(name="Legend",
values=c("red", "blue3", "green3"))
Abschließend werden mit den Funktionen scale_y_continuous() bzw. scale_color_manual() Y-Achse und Legende formatiert.