Jakob Richter

Statistik, R, Fotografie und Sonstiges

ggplot2: Tipps für Grafiken in schwarz weiß

Das ggplot2 hübschere und buntere Grafiken als unter R standard erzeugt sollte mittlerweile jeder wissen. Doch es geht mit ein paar Tricks auch in Graustufen und druckerfreundlich.
Am schnellsten geht es in dem wir unserem ggplot-Objekt einfach ein theme_bw() hinzufügen (g < - g + theme_bw()). Unter umständen ist man mit dem Ergebnis sogar schon zufrieden. Wer das Theme nicht so schön findet, dem sei diese informative Seite ans Herz gelegt.
Wichtig ist, dass bei umfangreicheren ggplot2-Objekten das Farbschema schon am Anfang hinzugefügt wird, da ansonsten Einstellungen die in +opts() vorgenommen wurden überschrieben werden können.

Ein Beispiel

Nehmen wir die recht umfangreiche schon erstellte Grafik aus dem letzten ggplot2-Beitrag.

Machen wir von Anfang an klar, welches Theme wir nutzen wollen:

1
g < - ggplot(mdat,aes(y=value,x=Jahr)) + theme_bw()

Hier verwenden wir nun anstatt color für die Färbung der Punkte einfach shape. Dies entspricht genau dem pch wie man es aus R kennt.
Weiterlesen »

Ersetzen in regelmäßigen Abständen, bzw. nach einem Schema

Vielleicht hat dieses Codebeispiel keine große Praxisrelevanz, aber dennoch stolpert man vielleicht mal über die Aufgabe. Hier also ein fiktives Beispiel:
Es liegt eine sehr einfache Reihe an Messdaten vor, von denen wir wissen, dass sie nur Werktags erhoben wurden. In Wochentagen sähe es also so aus:

MO DI MI DO FR MO DI MI DO FR MO DI..

Nach 5 Messungen ist also eine Lücke von 2 Tagen, die leider nicht im Datensatz selbst ist, die wir aber irgendwie füllen wollen – vielleicht mit Daten aus den Wochenendsmessungen.
Ein Ersetz-Schema sieht also wie folgt aus, wobei T angibt, dass wir die Daten aus dem Datensatz nehmen wollen, ein F gibt an, dass der alternative Datensatz zu nutzen ist.

T T T T T F F T T T T T F F T T

Am einfachsten nachzuvollziehen geht es in einer While-Schleife. Hier bereits in einer sehr allgemein nutzbaren Funktion. Es gibt einen Vektor mit den Ursprungsdaten und einen mit den Lückenfüllern und natürlich das Schema, wonach der neue Vektor entstehen soll.

Weiterlesen »

Tipp: nicht-destruktives Arbeiten mit par()

Ein kleiner Tipp, wenn man mal doch mit der in R eingebauten Grafikumgebung arbeiten will und nicht mit ggplot.
Hat man mal ein längeres R-Skript und erzeugt darin verschiedene Grafiken, kommt es häufig vor, dass man für einige bestimmte Einstellungen in par() ändern möchte. Insbesondere vermutlich mfrow=c(2,3) um mehrere Plots neben und untereinander in einer Grafik zusammenzufügen. Wenn dann die nächsten Grafiken wieder einzeln geplotted werden sollen, muss man wieder mühselig die Parameter von par() zurück setzen.
Am elegantesten geht es wohl so:

1
2
3
4
5
6
7
8
9
# ...
# irgendwelcher Code
op <- par(mfrow=c(1,2)) #Einstellen der Grafikparameter
  #2 Plots nebeneinander
  plot(runif(100),runif(100))
  plot(runif(100),runif(100))
par(op) #Alles auf den Zustand davor zurücksetzen
plot(runif(100),runif(100)) #1 Plot alleine
#...

ggplot2 – ein umfangreiches Beispiel

Das Einführungsbeispiel war ja in Punkto Datenumfang sehr bescheiden. Seine stärke spielt ggplot2 vor allem bei großen Datensätzen mit vielen Merkmalen aus. Insbesondere, wenn man noch nicht weiß wo es hingehen soll.

Einen Datensatz entdecken

Aus der Umweltprobenbank habe ich mir mal diesen Datensatz zusammengestellt. Ich weiß auch nur, dass es um die Bodenbelastungen an verschiedenen Orten in Deutschland geht. Einen tieferen Einblick in die Daten gewinnt man mit bloßen Augen nicht so recht.

Ein kleiner Einblick mit Excel in den Datensatz


Weiterlesen »

ggplot – eine Einführung

Wie funktioniert das mit ggplot? Ich schwärme ja oft von diesem tollen Packet, wie vermutlich fast jeder, der ggplot (genauer ggplot2) kennen und nutzen gelernt hat. Doch für Einsteiger ist die Struktur oft zuerst verwirrend und der Aufwand scheint nicht den Nutzen wert zu sein. Von dem Gegenteil möchte ich euch nun jedoch überzeugen, gerade auch, weil sich der Aufwand am Ende doch erheblich reduzieren kann.

Die Vorteile von ggplot2:

  • schönere Optik
  • Grafiken können leicht an neue Bedürfnisse angepasst werden
  • Exploration von Daten mit wenig Code und bereits druckfertigen Ergebnissen
  • Erscheinungsbild mit wenig Code sauber veränderbar
  • Viele bereits mitgelieferte Plot-typen

Nachteile:

  • gewisse Einarbeitungszeit
  • Daten für ggplot2 Vorbereiten manchmal unintuitiv

Weiterlesen »

Porto

R: Berechnung in Variable speichern und gleichzeitig Ausgeben

Wieder ein kleiner Trick für den R-Alltag. Häufig will man eine Berechnung durchführen, das Ergebnis in einer Variable speichern und auch das Ergebnis gleich mal sehen. Zum Beispiel ist es ja nicht schlecht bei der Anpassung eines (linearen) Modells gleich mal die geschätzten Parameter zu sehen, bevor man weiter damit arbeitet.

> (lm.trees <- lm(Height~.,data=trees))

Call:
lm(formula = Height ~ ., data = trees)

Coefficients:
(Intercept) Girth Volume
83.2958 -1.8615 0.5756

apply() hoch 3

Nach dem Beitrag zu lapply() und sapply() möchte ich hier nun das etwas mächtigere (?) apply() vorstellen, was man in R wohl kaum missen will.

Ich werde kurz zeigen wie mit apply() Matrizen und data.frames zeilen- sowie spaltenweise Ausgewertet werden können. Nach dieser sehr leichten Übung widmen wir uns einem etwas trickreicherem Beispiel, in dem wir mehrere gleichartige Tabellen (also Matrizen bzw. data.frames) der gleichen Zeilen- und Spaltenanzahl vorliegen haben. Hier möchten wir die Informationen aus immer den gleichen Zellen zusammenfassen.
Weiterlesen »

Kleiner R-Helferling: example()

Hui. Dass es diese Funktion gibt hätte ich ja nicht gedacht. Sicherlich seid ihr schon über die Beispiele in der R-Hilfe gestolpert und habt sie auch mal ausgeführt um zu gucken was passiert. Copy&Paste? Pah! Mit example() geht’s auch schneller. Was kann man nochmal mit predict.glm() machen? Mit example(predict.glm) findest du es heraus. Funktioniert auch ganz gut für viele Beispieldatensätze example(chickwts).
Weiterlesen »

Dänemark

Archiv

  • 2012 (28)