Kombination von Box- und Jitter Plots mit ‘ggplot2’

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")) 

plot of chunk plot

Abschließend werden mit den Funktionen scale_y_continuous() bzw. scale_color_manual() Y-Achse und Legende formatiert.

Advertisements

About norbert

I am post doc at the Department of Medical Psychology and Sociology, Leipzig University (GER), with degrees in sociology (MA) and public health (MPH).
Image | This entry was posted in Visualizing Data and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s