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.

Für den Konfidenzintervall ist die Flächenfarbe (fill=) schwarz und die Farbe der Mittellinie (fill=) grau. Ich finde es übrigens sehr praktisch Farben in der Hex-Schreibweise einzugeben, da mit wenig Tipparbeit die Farbkomponenten festgelegt sind: #FFFFFF oder man sucht sich einfach eine schöne Farbe.
Das nur nebenbei. Wichtig ist die Angabe von alpha= der Undurchsichtigkeit des Geoms, da ansonsten alles tatsächlich schwarz wäre.

3
4
5
g <- g + geom_point(aes(shape=Probenart)) +
  stat_smooth(fill="black",color="#555555",alpha=0.1) +
  facet_wrap(~Analyt+Messeinheit, scales="free_y", ncol=1)

Im folgenden Schritt passen wir noch die vielen Optionen aus dem Ausgangsbeispiel an. Aus guides(color = ...) muss natürlich guides(shape = ...) werden, da wir ja nun die Legende für die Symbole (Shapes) modifizieren wollen.
Hinzu kommt noch - und das ist relativ wichtig - die Festlegung der shape-Scale via +scale_shape_manual(values=c(1,2,...)), denn unter der Standardeinstellung gibt es nur 6 verschiedene Symbole, alles drüber beleibt leer. Welche Zahl für welches Symbol steht ist wie bei den base graphics.

Welche Nummer liefert welches Symbol. Hier eine kleine Zuordnung. Wenn mann es mal schnell braucht einfach plot(0:25,1,pch=0:25) ausführen.

Alternativ kann man auch Irgendwelche Zeichen verwenden. Also scale_shape_manual(values=c("a","#","?",...)). Dann sollte jedoch mit geom_point(aes(...), size=2) die Zeichengröße etwas erhöht werden.

Das war es auch schon an Anpassungen, die vorgenommen werden müssen, um solch einen kopierfreundlichen Plot zu erzeugen.

7
8
9
10
11
12
13
14
15
16
g <- g + ylab(label="Wert") + 
  opts(legend.position="bottom", title="Bodenproben") + 
  guides(shape = guide_legend(ncol = 2,title.vjust=0.2)) +
  scale_shape_manual(values=c(21,22,23,24,25,3,8,4)) + 
  opts(legend.title=theme_text(angle=90, face="bold", size=11),
       plot.title=theme_text(face="bold", size=20,vjust=1)) +
       scale_x_continuous(minor_breaks = function(x){ceiling(x[1]):floor(x[2])},
                          breaks = function(x){seq(ceiling(x[1]),floor(x[2]),by=2)})
 
g

Farben und Schwarzweißdrucker

Ein farbiger Plot kann auch durchaus kopierbar sein. Leider ist das standard ggplot2-Farbschema weder besonders SW-Drucker-freundlich (alle Farben haben die gleiche Helligkeit) noch besonders gut lesbar für Farbenblinde. Wer sich für das Thema interessiert findet hier eine gute Informationsgrundlage. Es spricht häufig sicherlich nichts dagegen, sowohl Farben als auch Symbole zu verwenden, indem man in den Aesthetics beides festlegt (aes(shape=xy, color=xy)).

Leave a Reply