Kapitel 68 ggplot2

To do: * Beispiele an Powerpoint-Präsentation anpassen * Text verbessern

Mit den Base-R Befehlen können wir perfekte Graphiken erstellen und eigentlich bräuchten wir keinen anderen Ansatz. Trotzdem benutzen viele das ggplot2 Paket. Was sind die Vorteile?

ggplot2 ist ein Packet, dass eine eigene Graphiksprache bietet

Diese Sprache hat eine klare Grammatik. Kennt man diese Grammatik nicht, wird einem der Code von ggplot2 komisch vorkommen. Kennt man aber die wichtigsten Elemente dieser Grammatik, wird man sehr schnell Graphiken von einfach (z.B. um schnell Daten anzuschauen, ohne dass man die Graphik veröffentlich will) zu komplexen (zum Veröffentlichen) Graphiken erstellen.

Eigentlich sollten Sie gar nicht dieses Kapitel lesen, sondern direkt vom Meister lernen: Schauen Sie sich doch dieses Video in Ruhe an (es gibt auch noch einen zweiten Teil).

Das online Buch zu ggplot2 finden Sie hier.

Vielleicht hilft auch diese Präsentation (Powerpoint). Der code in diesem Kapitel folgt mehr oder weniger dem Inhalt der Präsentation.

68.0.1 Pakete

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

68.1 ggplot Graphiken bestehen aus verschiedenen Elementen

  • Daten. Jede Graphik benötigt Daten
  • Mapping (Aesthetics): Wir müssen die Daten auf der Leinwand zuordnen und entscheiden, was wo abgebildet wird. Wo kommen welche Daten hin. Wir nennen das mapping. Was kommt auf die x-Achse, was kommt auf die y-Achse, was für Gruppen gibt es, was für Variablen bestimmen die Farben, Formen, etc.
  • Es gibt das aesthetics mapping und das facets mapping. Beim facets mapping erstellen wir untergruppen, die innerhalb der Graphik in separaten Untergraphiken dargestellt werden. Wir entscheiden hier, nach welchen Variablen die Untergruppen erstellt werden.

68.1.1 Statistik

Welche Statistik soll benutzt werden, um die Daten darzustellen, zum Beispiel die Anzahl, die Summe, der Mittelwert, etc..

68.1.2 Scales

Scales sind zu Beginn etwas schwierig zu verstehen, sie helfen uns, die Daten abbzubilden, also sie sichtbar zu machen (Farben, Formen, etc.) und sie auch zu verstehen (Achsenbeschriftungen und Legenden).

68.1.3 Geometrien

Die Geoms sind fast das wichtigste, sie entschieden, wie die Daten abgebildet werden. Wollen Wir Punkte, Linien, Boxplots, Histogramme, etc.? Die Geoms entscheiden das. Die gleichen Daten können mit verschiedenen Geoms abgebildet werden. So wird geom_point() die Daten anders abbilden als geom_line() oder geom_boxplot.

68.1.4 Fazetten (Facets)

Die Facets helfen uns, wenn wir die Graphiken in Untergraphiken unterteilen wollen.

68.1.5 Koordinaten

Coordinates und Scales werden öfters verwechselt. Coordinates sind spezifisch zu wie die Abbildungen positioniert werden.

68.1.6 Themen (Themes)

Die Themes geben an, wie das allgemeine Aussehen der Graphiken ist.

68.1.7 Alle ggplot2 Graphken haben mindestens die folgenden drei Elemente:

    1. data
    1. aesthetic mappings
    1. layers, gewöhnlich mit den Geoms

68.2 Wie werden die Graphiken aufgebaut

  • Wir rufen ggplot auf, bestimen die Daten (ein data frame).
  • Wir sagen, wo wir welche Daten abbilden (aesthetic mapping): was kommt auf die x-Achse, was auf die y-Achse, welche Variable bildet Gruppen oder Farbben. Wir können dies für die gesammte Graphik tun (gilt dann für alle Geoms) oder für jedes Geom einzeln.
  • Wir bestimmen das Geom
  • Wir können mehrere Lagen hinzufügen (d.h. mehr Geoms)
  • Wir können die Graphik auch speichern

68.2.1 Unsere erste ggplot2 Graphik

Zuerst müssen wir ein paar Daten erfinden.

g<-c(1,2,3,4)
group<-factor(sample(g, 100, replace=TRUE), levels=c(1,2,3,4), labels=c("Dogs", "Cats", "Birds", "Elephants"))
a<-rnorm(100, (50*as.numeric(group)) ,20) # a numeric variable 
b<-a+20+0.4*a+rnorm(100,0,30)

our_data<-data.frame(a,b,group)
library(ggplot2) # you could also load the tidyverse package into the library, as ggplot2 is part of tidyverse: library(tidyverse)
# or 


g<-ggplot(data=our_data, 
       mapping=aes(x=a,     # remember: This is a global mapping. all geoms later will inherit these mappings. 
                   y=b))
g

Nichts ist passiert. Wir haben nur das mapping definiert, da wir aber noch kein Geom definiert haben, wurde noch nichts abgebildet.

Jetzt fügen wir das Geoms hinzu.

g<-g+geom_point() # we store the graph in an object g
g # we read the object (and it gets printed)

print(g) # here you would not need to use the print command, but if you use it in a fucntion or a loop, you would need it, 

         # see here: https://ggplot2.tidyverse.org/reference/print.ggplot.html#:~:text=Generally%2C%20you%20do%20not%20need,a%20function%20or%20for%20loop. 

Wir könnten das auch so schreiben:

ggplot(data=our_data, 
       mapping=aes(x=a, 
                   y=b, colour=group))+
  geom_point() 

Das war ein Beispiel eines globalen Mappings. Alle Geoms würden das mapping erben. Hier ein Beispiel eines nicht-globalen mappings:

g2<-ggplot(data = our_data)+  # we still set the data globally 
  geom_point(mapping=aes(x=a, 
                         y=b)) # this mapping will not be inherited by other geoms that will be used later. 
g2

Wir könnten auch die Daten nicht global setzen:

g3<-ggplot()+
  geom_point(mapping=aes(x=a, 
                         y=b), data=our_data)
g3 # so for all three graphs we have the same result, but we set and mapped the data differently. 

Wenn wir die Daten nicht global setzen, werden wir natürlich Probleme bekommen, wenn wir neue Geoms hinzufügen, ohne dort lokal die Daten zu definieren. ggplot weiss dann nicht was zu tun ist.

g3+geom_line() 

Nichts ist passiert, da ggplot nicht weiss, mit welchen Daten die Linien gezogen werden sollten.

g2+geom_line() 
## Error in `geom_line()`:
## ! Problem while setting up geom.
## ℹ Error occurred in the 2nd layer.
## Caused by error in `compute_geom_1()`:
## ! `geom_line()` requires the following missing aesthetics: x and y

Hier wird ein Fehler ausgegeben, weil wir die aesthetics nicht global gesetzt haben.

Das nächste Beispiel wird funktionieren, weil in der Graphik g haben wir die Daten und die aesthetics global gesetzt, also gelten sie für jedes neue Geom. Jedes neue Geom kann das mapping erben.

g+geom_line() # because in the first example (the g) we mapped the data and the aes globally, every new geom can inherit the mapping. 

Im nächsten Beispiel wollen wir Farben per Gruppe hinzufügen.

g4<-ggplot(data=our_data, aes(x=a, y=b)) +
  geom_point(aes(colour=as.numeric(group)<3)) 
g4

g4<-g4+geom_point(aes(colour=group)) # now we mixed it up, because it just added the aesthetic mapping. 
g4

g5<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group))
g5

g6<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(),colour=group) # this does not work. if we want to take colours from a factor / from the data, it needs to be within the aes() mapping
g6
## Error in `geom_point()`:
## ! Problem while converting geom to grob.
## ℹ Error occurred in the 1st layer.
## Caused by error:
## ! Unknown colour name: Dogs

Wenn wir es wie unten schreiben, wird es funktioneren.

g6<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(),colour=as.numeric(group)) # now we explicitly tell r that the factor variable group should be taken as a numeric variable. 
g6

g7<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(),colour="red") # We can set the colours outside the aes mapping. 
g7

g8<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour="red")) # look at the difference of g8 (mapping), to g7 (setting the colour outside the aes mapping) 
g8

Wir können auch Transparenz zu den Farben hinzufügen.

g9<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group), alpha=0.3, size=10) #  alpha sets the colour transparency, 0 = completely transparent, 1 completely opaque.
g9

g10<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group), alpha=0.3) #  alpha sets the colour transparency, 0 = completely transpaent, 1 completely opaque.
g10

g11<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group, alpha=0.1)) #  alpha sets the colour transparency, but we did it wrong here ;) look, it put alpha in the legend, as if we mapped data to the alpha. 

g11

68.3 Farben in R

Wir können die Farben mit einem der 657 Namen definieren. Schreiben Sie colours() um alle Namen zu sehen.

colours()
##   [1] "white"                "aliceblue"            "antiquewhite"        
##   [4] "antiquewhite1"        "antiquewhite2"        "antiquewhite3"       
##   [7] "antiquewhite4"        "aquamarine"           "aquamarine1"         
##  [10] "aquamarine2"          "aquamarine3"          "aquamarine4"         
##  [13] "azure"                "azure1"               "azure2"              
##  [16] "azure3"               "azure4"               "beige"               
##  [19] "bisque"               "bisque1"              "bisque2"             
##  [22] "bisque3"              "bisque4"              "black"               
##  [25] "blanchedalmond"       "blue"                 "blue1"               
##  [28] "blue2"                "blue3"                "blue4"               
##  [31] "blueviolet"           "brown"                "brown1"              
##  [34] "brown2"               "brown3"               "brown4"              
##  [37] "burlywood"            "burlywood1"           "burlywood2"          
##  [40] "burlywood3"           "burlywood4"           "cadetblue"           
##  [43] "cadetblue1"           "cadetblue2"           "cadetblue3"          
##  [46] "cadetblue4"           "chartreuse"           "chartreuse1"         
##  [49] "chartreuse2"          "chartreuse3"          "chartreuse4"         
##  [52] "chocolate"            "chocolate1"           "chocolate2"          
##  [55] "chocolate3"           "chocolate4"           "coral"               
##  [58] "coral1"               "coral2"               "coral3"              
##  [61] "coral4"               "cornflowerblue"       "cornsilk"            
##  [64] "cornsilk1"            "cornsilk2"            "cornsilk3"           
##  [67] "cornsilk4"            "cyan"                 "cyan1"               
##  [70] "cyan2"                "cyan3"                "cyan4"               
##  [73] "darkblue"             "darkcyan"             "darkgoldenrod"       
##  [76] "darkgoldenrod1"       "darkgoldenrod2"       "darkgoldenrod3"      
##  [79] "darkgoldenrod4"       "darkgray"             "darkgreen"           
##  [82] "darkgrey"             "darkkhaki"            "darkmagenta"         
##  [85] "darkolivegreen"       "darkolivegreen1"      "darkolivegreen2"     
##  [88] "darkolivegreen3"      "darkolivegreen4"      "darkorange"          
##  [91] "darkorange1"          "darkorange2"          "darkorange3"         
##  [94] "darkorange4"          "darkorchid"           "darkorchid1"         
##  [97] "darkorchid2"          "darkorchid3"          "darkorchid4"         
## [100] "darkred"              "darksalmon"           "darkseagreen"        
## [103] "darkseagreen1"        "darkseagreen2"        "darkseagreen3"       
## [106] "darkseagreen4"        "darkslateblue"        "darkslategray"       
## [109] "darkslategray1"       "darkslategray2"       "darkslategray3"      
## [112] "darkslategray4"       "darkslategrey"        "darkturquoise"       
## [115] "darkviolet"           "deeppink"             "deeppink1"           
## [118] "deeppink2"            "deeppink3"            "deeppink4"           
## [121] "deepskyblue"          "deepskyblue1"         "deepskyblue2"        
## [124] "deepskyblue3"         "deepskyblue4"         "dimgray"             
## [127] "dimgrey"              "dodgerblue"           "dodgerblue1"         
## [130] "dodgerblue2"          "dodgerblue3"          "dodgerblue4"         
## [133] "firebrick"            "firebrick1"           "firebrick2"          
## [136] "firebrick3"           "firebrick4"           "floralwhite"         
## [139] "forestgreen"          "gainsboro"            "ghostwhite"          
## [142] "gold"                 "gold1"                "gold2"               
## [145] "gold3"                "gold4"                "goldenrod"           
## [148] "goldenrod1"           "goldenrod2"           "goldenrod3"          
## [151] "goldenrod4"           "gray"                 "gray0"               
## [154] "gray1"                "gray2"                "gray3"               
## [157] "gray4"                "gray5"                "gray6"               
## [160] "gray7"                "gray8"                "gray9"               
## [163] "gray10"               "gray11"               "gray12"              
## [166] "gray13"               "gray14"               "gray15"              
## [169] "gray16"               "gray17"               "gray18"              
## [172] "gray19"               "gray20"               "gray21"              
## [175] "gray22"               "gray23"               "gray24"              
## [178] "gray25"               "gray26"               "gray27"              
## [181] "gray28"               "gray29"               "gray30"              
## [184] "gray31"               "gray32"               "gray33"              
## [187] "gray34"               "gray35"               "gray36"              
## [190] "gray37"               "gray38"               "gray39"              
## [193] "gray40"               "gray41"               "gray42"              
## [196] "gray43"               "gray44"               "gray45"              
## [199] "gray46"               "gray47"               "gray48"              
## [202] "gray49"               "gray50"               "gray51"              
## [205] "gray52"               "gray53"               "gray54"              
## [208] "gray55"               "gray56"               "gray57"              
## [211] "gray58"               "gray59"               "gray60"              
## [214] "gray61"               "gray62"               "gray63"              
## [217] "gray64"               "gray65"               "gray66"              
## [220] "gray67"               "gray68"               "gray69"              
## [223] "gray70"               "gray71"               "gray72"              
## [226] "gray73"               "gray74"               "gray75"              
## [229] "gray76"               "gray77"               "gray78"              
## [232] "gray79"               "gray80"               "gray81"              
## [235] "gray82"               "gray83"               "gray84"              
## [238] "gray85"               "gray86"               "gray87"              
## [241] "gray88"               "gray89"               "gray90"              
## [244] "gray91"               "gray92"               "gray93"              
## [247] "gray94"               "gray95"               "gray96"              
## [250] "gray97"               "gray98"               "gray99"              
## [253] "gray100"              "green"                "green1"              
## [256] "green2"               "green3"               "green4"              
## [259] "greenyellow"          "grey"                 "grey0"               
## [262] "grey1"                "grey2"                "grey3"               
## [265] "grey4"                "grey5"                "grey6"               
## [268] "grey7"                "grey8"                "grey9"               
## [271] "grey10"               "grey11"               "grey12"              
## [274] "grey13"               "grey14"               "grey15"              
## [277] "grey16"               "grey17"               "grey18"              
## [280] "grey19"               "grey20"               "grey21"              
## [283] "grey22"               "grey23"               "grey24"              
## [286] "grey25"               "grey26"               "grey27"              
## [289] "grey28"               "grey29"               "grey30"              
## [292] "grey31"               "grey32"               "grey33"              
## [295] "grey34"               "grey35"               "grey36"              
## [298] "grey37"               "grey38"               "grey39"              
## [301] "grey40"               "grey41"               "grey42"              
## [304] "grey43"               "grey44"               "grey45"              
## [307] "grey46"               "grey47"               "grey48"              
## [310] "grey49"               "grey50"               "grey51"              
## [313] "grey52"               "grey53"               "grey54"              
## [316] "grey55"               "grey56"               "grey57"              
## [319] "grey58"               "grey59"               "grey60"              
## [322] "grey61"               "grey62"               "grey63"              
## [325] "grey64"               "grey65"               "grey66"              
## [328] "grey67"               "grey68"               "grey69"              
## [331] "grey70"               "grey71"               "grey72"              
## [334] "grey73"               "grey74"               "grey75"              
## [337] "grey76"               "grey77"               "grey78"              
## [340] "grey79"               "grey80"               "grey81"              
## [343] "grey82"               "grey83"               "grey84"              
## [346] "grey85"               "grey86"               "grey87"              
## [349] "grey88"               "grey89"               "grey90"              
## [352] "grey91"               "grey92"               "grey93"              
## [355] "grey94"               "grey95"               "grey96"              
## [358] "grey97"               "grey98"               "grey99"              
## [361] "grey100"              "honeydew"             "honeydew1"           
## [364] "honeydew2"            "honeydew3"            "honeydew4"           
## [367] "hotpink"              "hotpink1"             "hotpink2"            
## [370] "hotpink3"             "hotpink4"             "indianred"           
## [373] "indianred1"           "indianred2"           "indianred3"          
## [376] "indianred4"           "ivory"                "ivory1"              
## [379] "ivory2"               "ivory3"               "ivory4"              
## [382] "khaki"                "khaki1"               "khaki2"              
## [385] "khaki3"               "khaki4"               "lavender"            
## [388] "lavenderblush"        "lavenderblush1"       "lavenderblush2"      
## [391] "lavenderblush3"       "lavenderblush4"       "lawngreen"           
## [394] "lemonchiffon"         "lemonchiffon1"        "lemonchiffon2"       
## [397] "lemonchiffon3"        "lemonchiffon4"        "lightblue"           
## [400] "lightblue1"           "lightblue2"           "lightblue3"          
## [403] "lightblue4"           "lightcoral"           "lightcyan"           
## [406] "lightcyan1"           "lightcyan2"           "lightcyan3"          
## [409] "lightcyan4"           "lightgoldenrod"       "lightgoldenrod1"     
## [412] "lightgoldenrod2"      "lightgoldenrod3"      "lightgoldenrod4"     
## [415] "lightgoldenrodyellow" "lightgray"            "lightgreen"          
## [418] "lightgrey"            "lightpink"            "lightpink1"          
## [421] "lightpink2"           "lightpink3"           "lightpink4"          
## [424] "lightsalmon"          "lightsalmon1"         "lightsalmon2"        
## [427] "lightsalmon3"         "lightsalmon4"         "lightseagreen"       
## [430] "lightskyblue"         "lightskyblue1"        "lightskyblue2"       
## [433] "lightskyblue3"        "lightskyblue4"        "lightslateblue"      
## [436] "lightslategray"       "lightslategrey"       "lightsteelblue"      
## [439] "lightsteelblue1"      "lightsteelblue2"      "lightsteelblue3"     
## [442] "lightsteelblue4"      "lightyellow"          "lightyellow1"        
## [445] "lightyellow2"         "lightyellow3"         "lightyellow4"        
## [448] "limegreen"            "linen"                "magenta"             
## [451] "magenta1"             "magenta2"             "magenta3"            
## [454] "magenta4"             "maroon"               "maroon1"             
## [457] "maroon2"              "maroon3"              "maroon4"             
## [460] "mediumaquamarine"     "mediumblue"           "mediumorchid"        
## [463] "mediumorchid1"        "mediumorchid2"        "mediumorchid3"       
## [466] "mediumorchid4"        "mediumpurple"         "mediumpurple1"       
## [469] "mediumpurple2"        "mediumpurple3"        "mediumpurple4"       
## [472] "mediumseagreen"       "mediumslateblue"      "mediumspringgreen"   
## [475] "mediumturquoise"      "mediumvioletred"      "midnightblue"        
## [478] "mintcream"            "mistyrose"            "mistyrose1"          
## [481] "mistyrose2"           "mistyrose3"           "mistyrose4"          
## [484] "moccasin"             "navajowhite"          "navajowhite1"        
## [487] "navajowhite2"         "navajowhite3"         "navajowhite4"        
## [490] "navy"                 "navyblue"             "oldlace"             
## [493] "olivedrab"            "olivedrab1"           "olivedrab2"          
## [496] "olivedrab3"           "olivedrab4"           "orange"              
## [499] "orange1"              "orange2"              "orange3"             
## [502] "orange4"              "orangered"            "orangered1"          
## [505] "orangered2"           "orangered3"           "orangered4"          
## [508] "orchid"               "orchid1"              "orchid2"             
## [511] "orchid3"              "orchid4"              "palegoldenrod"       
## [514] "palegreen"            "palegreen1"           "palegreen2"          
## [517] "palegreen3"           "palegreen4"           "paleturquoise"       
## [520] "paleturquoise1"       "paleturquoise2"       "paleturquoise3"      
## [523] "paleturquoise4"       "palevioletred"        "palevioletred1"      
## [526] "palevioletred2"       "palevioletred3"       "palevioletred4"      
## [529] "papayawhip"           "peachpuff"            "peachpuff1"          
## [532] "peachpuff2"           "peachpuff3"           "peachpuff4"          
## [535] "peru"                 "pink"                 "pink1"               
## [538] "pink2"                "pink3"                "pink4"               
## [541] "plum"                 "plum1"                "plum2"               
## [544] "plum3"                "plum4"                "powderblue"          
## [547] "purple"               "purple1"              "purple2"             
## [550] "purple3"              "purple4"              "red"                 
## [553] "red1"                 "red2"                 "red3"                
## [556] "red4"                 "rosybrown"            "rosybrown1"          
## [559] "rosybrown2"           "rosybrown3"           "rosybrown4"          
## [562] "royalblue"            "royalblue1"           "royalblue2"          
## [565] "royalblue3"           "royalblue4"           "saddlebrown"         
## [568] "salmon"               "salmon1"              "salmon2"             
## [571] "salmon3"              "salmon4"              "sandybrown"          
## [574] "seagreen"             "seagreen1"            "seagreen2"           
## [577] "seagreen3"            "seagreen4"            "seashell"            
## [580] "seashell1"            "seashell2"            "seashell3"           
## [583] "seashell4"            "sienna"               "sienna1"             
## [586] "sienna2"              "sienna3"              "sienna4"             
## [589] "skyblue"              "skyblue1"             "skyblue2"            
## [592] "skyblue3"             "skyblue4"             "slateblue"           
## [595] "slateblue1"           "slateblue2"           "slateblue3"          
## [598] "slateblue4"           "slategray"            "slategray1"          
## [601] "slategray2"           "slategray3"           "slategray4"          
## [604] "slategrey"            "snow"                 "snow1"               
## [607] "snow2"                "snow3"                "snow4"               
## [610] "springgreen"          "springgreen1"         "springgreen2"        
## [613] "springgreen3"         "springgreen4"         "steelblue"           
## [616] "steelblue1"           "steelblue2"           "steelblue3"          
## [619] "steelblue4"           "tan"                  "tan1"                
## [622] "tan2"                 "tan3"                 "tan4"                
## [625] "thistle"              "thistle1"             "thistle2"            
## [628] "thistle3"             "thistle4"             "tomato"              
## [631] "tomato1"              "tomato2"              "tomato3"             
## [634] "tomato4"              "turquoise"            "turquoise1"          
## [637] "turquoise2"           "turquoise3"           "turquoise4"          
## [640] "violet"               "violetred"            "violetred1"          
## [643] "violetred2"           "violetred3"           "violetred4"          
## [646] "wheat"                "wheat1"               "wheat2"              
## [649] "wheat3"               "wheat4"               "whitesmoke"          
## [652] "yellow"               "yellow1"              "yellow2"             
## [655] "yellow3"              "yellow4"              "yellowgreen"
g12<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(color="tomato", alpha=1, size =3) #  alpha sets the colour transparency, 0 = completely transpaent, 1 completely opaque.
g12

Wir können die Farben auch im hexadezimal Format angeben. Hier gibt es jeweils zwei Zeichen für r, g und b: #RRGGBB , Siehe auch (hier klicken).

g13<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(color="#BD2122", alpha=1, size =3) #  alpha sets the colour transparency, 0 = completely transpaent, 1 completely opaque.
g13

Wir könne auch eine Nummer für die Farben angeben.

g13<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(color=657, alpha=1, size =3) #  alpha sets the colour transparency, 0 = completely transpaent, 1 completely opaque.
g13

Hier finden Sie mehr Informationen über Transparente Farben.

Für Farben in Base-R:.

68.3.1 Achtung: Unterschied zwischen colour und fill

Für geom_point müssen wir colour benutzen.

g14<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(shape=group, color=657, alpha=1, size =3) #  we can set the shape .
g14

g15<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(shape=group, color=group), alpha=1, size =3) #  we can map the shape and colors to data in aes()
g15

68.4 Aesthetics in den unterschiedlichenn Geoms

Nicht alle Geoms brauchen die gleichen Aesthetics Angaben.

Die Hilfe hilft hier: ?geom_point als Beispiel. Dann in der Hilfe im Abschnitt Aesthetics nachlesen. Die Fett geschriebenen Elemente müssen angegeben werden.

68.5 Innerhalb oder ausserhalb aes() die Variablen angeben?

Ob wir eine Variable innerhalb oder ausserhalb von aes angeben, macht einen wichtigen Unterschied. * Innerhalb aes: Die Variable wird als Bestandteil der Daten angesehen und in der Legende angegeben. * Ausserhalb aes: Die Angabe wird so beachtet, als ob sie nichts mit den Daten zu tun hat. Sie erscheint nicht in der Legende.

Hier wird die size (Grösse) im aes bestimmt. Deswegen erscheint die Grösse als Legende. Was ja hier keinen Sinn macht, da ja Size (Grösse) eine Konstante (9) ist und nicht von einer Variable bestimmt wird.

g16<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group, size=9), alpha=0.3) # again, we have put the size into the aes(), this means it is treated as if it were data, therefore a legend is produced, 
                                                  # which does not make sense, therefore, we put size outside the aes() 
g16

Hier unten setzen wir size (Grösse) ausserhalb des aes.

g17<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group), alpha=0.3, size=9) # now the size does not appear as a legend, but takes effect. 
g17

Wann würde es Sinn machen, die Grösse von den Daten (d.h. innerhalb aes) zu bestimmen? Dann, wenn wir zum Beispiel für die unterschiedlichen Tiergrouppen (Variable group) unterschiedliche Grössen möchten.

g18<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group, size=group), alpha=0.3) # now the size is based on the factor variable for the animal groups 
g18
## Warning: Using size for a discrete variable is not advised.

g18<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group, size=a), alpha=0.3) # we could also map it to a; but be aware that the size here is a "qualitative" distinction and not effective value of a
g18

Hier ein Beispel für ein Geom, dass die y-Achse nicht benötigt. Bei einem Histogramm müssen wir die y-Achse nicht angeben, da dass geom_histogram diese automatisch berechnet (Density oder Frequency).

hist1<-ggplot(data=our_data)+
  geom_histogram(aes(x=a))
hist1
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

hist1<-ggplot(data=our_data)+
  geom_histogram(aes(x=a, colour=group))
hist1
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

hist1<-ggplot(data=our_data)+
  geom_histogram(aes(x=a, fill=group), alpha=0.3)
hist1
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

68.5.1 Geometrien als Lagen

Die Geoms können auch als Lagen (Layers) gesehen werden. Wir können mehrere Lagen aufeinanderlegen (die die zuerste kommen sind zuunterst).

g22<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group, size=group), alpha=0.3) # now the size is made with the factor variable group. but an warning message is given: Using Size for a discrete variable is not advised
                                                        # You could transform group to a numeric variable  
g22
## Warning: Using size for a discrete variable is not advised.

g22<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group, size=as.numeric(group)), alpha=0.3) # now the warning message dissapears. 
g22

# you could also change the factor variable to an ordered factor variable 
g22<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group, size=factor(group, ordered=T)), alpha=0.3) # now the warning message dissapears. see also https://stackoverflow.com/questions/50211624/why-and-when-using-size-for-a-discrete-variable-is-not-advised 
g22

g22<-g22+geom_smooth(method="lm")
g22
## `geom_smooth()` using formula = 'y ~ x'

g23<-g22+geom_hline(yintercept=100, linetype="dashed", color="red", alpha=0.3, size=3) # here you see that you can layer the different geoms 
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
g23
## `geom_smooth()` using formula = 'y ~ x'

g24<-g23+geom_vline(xintercept=100, linetype="dashed", color="red", alpha=0.3, size=3) # here you see that you can layer the different geoms 
g24
## `geom_smooth()` using formula = 'y ~ x'

# Please have a look at the line where the aes of the plot are set. We see that new geom would not inherit the grouping
g25<-ggplot(data=our_data, aes(x=a, y=b))+
  geom_point(aes(colour=group),size=as.numeric(group))
g25

# now we have set the group via the color=group, let's see what now happens with the regression line 
g26<-g25+geom_smooth(method="lm") # this illustrates that it is important where you set grouping variable. If you set it in the ggplot element, following geoms will inherit this
g26
## `geom_smooth()` using formula = 'y ~ x'

##################
##################

# using statistics in ggplot2 ####
g27<-ggplot(data=our_data, aes(x=group, y=b))+
  geom_point(size=as.numeric(group))
             
g27

g28<-g27+stat_summary(fun="mean", colour="red", geom="point")
g28 

# Now we want to plot a versus b, with different colours per animal-group. 
# Then we would like to add the mean of a and b per group. 
g29<-ggplot(data=our_data, aes(x=a, y=b, colour=group))+
  geom_point()
g29 

# This is not that simple, so we better calculate outside the command the mean for a and b
abmean <- our_data %>% 
  group_by(group) %>% 
  summarise(a = mean(a), 
            b=mean(b))

# Now we can use these calculated means to plot the points per group: 
ggplot(data=our_data, 
       mapping=aes(x=a, 
                   y=b, 
                   colour=group))+
  geom_point(size=2)+
  geom_point(data=abmean, size=2, shape=3, stroke =2)

# https://ggplot2.tidyverse.org/reference/geom_abline.html