Kapitel 4. Liniendiagramme

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Linie Diagramme werden in der Regel verwendet, um darzustellen, wie sich eine kontinuierliche Variable auf der y-Achse im Verhältnis zu einer anderen kontinuierlichen Variable auf der x-Achse verändert. Häufig steht die Variable x für die Zeit, sie kann aber auch eine andere kontinuierliche Größe darstellen, z. B. die Menge eines Medikaments, das Versuchspersonen verabreicht wird.

Wie bei Balkendiagrammen gibt es auch hier Ausnahmen. Liniendiagramme können auch mit einer diskreten Variable auf der x-Achse verwendet werden. Das ist sinnvoll, wenn die Variable geordnet ist (z. B. "klein", "mittel", "groß"), aber nicht, wenn die Variable ungeordnet ist (z. B. "Kuh", "Gans", "Schwein"). Die meisten Beispiele in diesem Kapitel verwenden eine kontinuierliche Variable x, aber wir werden ein Beispiel sehen, in dem die Variable in einen Faktor umgewandelt und somit als diskrete Variable behandelt wird.

4.1 Erstellen eines einfachen Liniendiagramms

Problem

Du möchtest ein einfaches Liniendiagramm erstellen.

Lösung

Verwende ggplot() mit geom_line() und gib an, welche Variablen du auf x und y abgebildet hast(Abbildung 4-1):

ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line()
Basic line graph
Abbildung 4-1. Grundlegendes Liniendiagramm

Diskussion

In diesem Beispieldatensatz steht die Variable x, Time, in einer Spalte und die Variable y, demand, in einer anderen:

BOD
#>   Time demand
#> 1    1    8.3
#> 2    2   10.3
#> 3    3   19.0
#> 4    4   16.0
#> 5    5   15.6
#> 6    7   19.8

Linien Diagramme können mit diskreten (kategorischen) oder kontinuierlichen (numerischen) Variablen auf der x-Achse erstellt werden. In diesem Beispiel ist die Variabledemand numerisch, aber sie kann als kategorische Variable behandelt werden, indem sie mit factor() in einen Faktor umgewandelt wird(Abbildung 4-2). Wenn die Variable x ein Faktor ist, musst du auch aes(group=1) verwenden, damit ggplot weiß, dass die Datenpunkte zusammengehören und mit einer Linie verbunden werden sollen (siehe Rezept 4.3 für eine Erklärung, warum group bei Faktoren benötigt wird):

BOD1 <- BOD  # Make a copy of the data
BOD1$Time <- factor(BOD1$Time)

ggplot(BOD1, aes(x = Time, y = demand, group = 1)) +
  geom_line()
Basic line graph with a factor on the x-axis (notice that no space is allocated on the x-axis for 6)
Abbildung 4-2. Einfaches Liniendiagramm mit einem Faktor auf der x-Achse (beachte, dass auf der x-Achse kein Platz für 6 vorgesehen ist)

Im Datensatz BOD gibt es keinen Eintrag für Time = 6, also gibt es keine Ebene 6, wenn Time in einen Faktor umgewandelt wird. Faktoren enthalten kategoriale Werte, und in diesem Zusammenhang ist 6 nur ein weiterer Wert. Da er im Datensatz nicht vorkommt, ist auf der x-Achse kein Platz für ihn.

Bei ggplot2 reicht der standardmäßige y-Bereich eines Liniendiagramms gerade aus, um die y-Werte in den Daten zu erfassen. Bei einigen Datenarten ist es besser, wenn der y-Bereich bei Null beginnt. Du kannst ylim() verwenden, um den Bereich festzulegen, oder du kannst expand_limits() verwenden, um den Bereich um einen Wert zu erweitern. Dadurch wird der Bereich von Null bis zum Maximalwert der Nachfragespalte in BOD festgelegt(Abbildung 4-3):

# These have the same result
ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line() +
  ylim(0, max(BOD$demand))

ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line() +
  expand_limits(y = 0)
Line graph with manually set y range
Abbildung 4-3. Liniendiagramm mit manuell eingestelltem y-Bereich

Siehe auch

Siehe Rezept 8.2 für weitere Informationen zur Steuerung des Bereichs der Achsen.

4.2 Hinzufügen von Punkten zu einem Liniendiagramm

Problem

Du möchtest Punkte zu einem Liniendiagramm hinzufügen.

Lösung

Füge hinzu geom_point() (Abbildung 4-4):

ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line() +
  geom_point()
Line graph with points
Abbildung 4-4. Liniendiagramm mit Punkten

Diskussion

Manchmal ist es sinnvoll, jeden Datenpunkt in einem Liniendiagramm zu markieren. Das ist hilfreich, wenn die Dichte der Beobachtungen gering ist oder wenn die Beobachtungen nicht in regelmäßigen Abständen stattfinden. Im DatensatzBOD gibt es zum Beispiel keinen Eintrag für Time=6, aber das ist in einem bloßen Liniendiagramm nicht zu erkennen (vergleiche Abbildung 4-3 mit Abbildung 4-4).

Im Datensatz von worldpop sind die Abstände zwischen den einzelnen Datenpunkten nicht einheitlich. In der fernen Vergangenheit waren die Schätzungen nicht so häufig wie in der jüngeren Vergangenheit. Die Anzeige der Punkte im Diagramm zeigt, wann die einzelnen Schätzungen vorgenommen wurden(Abbildung 4-5):

library(gcookbook) # Load gcookbook for the worldpop data set

ggplot(worldpop, aes(x = Year, y = Population)) +
  geom_line() +
  geom_point()

# Same with a log y-axis
ggplot(worldpop, aes(x = Year, y = Population)) +
  geom_line() +
  geom_point() +
  scale_y_log10()
Top: points indicate where each data point is; bottom: the same data with a log y-axis
Abbildung 4-5. Oben: Punkte zeigen an, wo jeder Datenpunkt liegt; Unten: dieselben Daten mit einer logarithmischen y-Achse

Anhand der logarithmischen y-Achse kannst du sehen, dass die Rate der proportionalen Veränderung in den letzten tausend Jahren zugenommen hat. Die Schätzungen für die Jahre vor 0 haben eine ungefähr konstante Veränderungsrate von 10 Mal pro 5.000 Jahre. In den letzten 1.000 Jahren ist die Bevölkerung viel schneller gewachsen. Wir können auch sehen, dass die Bevölkerungsschätzungen in letzter Zeit viel häufiger vorkommen - und wahrscheinlich auch genauer sind!

Siehe auch

Um das Aussehen der Punkte zu ändern, siehe Rezept 4.5.

4.3 Ein Liniendiagramm mit mehreren Linien erstellen

Problem

Du möchtest ein Liniendiagramm mit mehr als einer Linie erstellen.

Lösung

In kannst du zusätzlich zu den Variablen, die der x- und y-Achse zugeordnet sind, eine weitere (diskrete) Variable colour oder linetype zuordnen, wie in Abbildung 4-6 gezeigt:

library(gcookbook) # Load gcookbook for the tg data set

# Map supp to colour
ggplot(tg, aes(x = dose, y = length, colour = supp)) +
  geom_line()

# Map supp to linetype
ggplot(tg, aes(x = dose, y = length, linetype = supp)) +
  geom_line()
A variable mapped to colour (left); A variable mapped to linetype (right)
Abbildung 4-6. Eine Variable, die einer Farbe zugeordnet ist (links); Eine Variable, die einem Linientyp zugeordnet ist (rechts)

Diskussion

Die Daten von tg haben drei Spalten, darunter den Faktor supp, den wir auf colour und linetype:

tg
#>   supp dose length
#> 1   OJ  0.5  13.23
#> 2   OJ  1.0  22.70
#> 3   OJ  2.0  26.06
#> 4   VC  0.5   7.98
#> 5   VC  1.0  16.77
#> 6   VC  2.0  26.14
Hinweis

Wenn die Variable x ein Faktor ist, musst du ggplot auch sagen, dass es nach dieser Variable gruppieren soll, wie im Folgenden beschrieben.

Linie Diagramme können mit einer kontinuierlichen oder kategorialen Variable auf der x-Achse verwendet werden. Manchmal wird die Variable auf der x-Achse als kategorisch angesehen, auch wenn sie als Zahl gespeichert ist. In unserem Beispiel gibt es drei Werte für dose: 0,5, 1,0 und 2,0. Du möchtest diese Werte vielleicht als Kategorien behandeln und nicht als Werte auf einer kontinuierlichen Skala. Dazu musst du dose in einen Faktor umwandeln(Abbildung 4-7):

ggplot(tg, aes(x = factor(dose), y = length, colour = supp, group = supp)) +
  geom_line()
Line graph with continuous x variable converted to a factor
Abbildung 4-7. Liniendiagramm mit kontinuierlicher x-Variable, umgewandelt in einen Faktor

Beachte die Verwendung von group = supp. Ohne diese Anweisung weiß ggplot nicht, wie es die Daten gruppieren soll, um die Linien zu zeichnen, und es gibt eine Fehlermeldung aus:

ggplot(tg, aes(x = factor(dose), y = length, colour = supp)) + geom_line()
#> geom_path: Each group consists of only one observation. Do you need to
#> adjust the group aesthetic?

Ein weiteres Problem, das häufig auftritt, wenn die falsche Gruppierung verwendet wird, ist, dass du ein gezacktes Sägezahnmuster siehst, wie in Abbildung 4-8:

ggplot(tg, aes(x = dose, y = length)) +
  geom_line()
A sawtooth pattern indicates improper grouping
Abbildung 4-8. Ein Sägezahnmuster weist auf eine unsachgemäße Gruppierung hin

Dies passiert, weil es mehrere Datenpunkte an jeder y-Positiongibt und ggplot denkt, dass sie alle in einer Gruppe sind. Die Datenpunkte für jede Gruppe werden mit einer einzigen Linie verbunden, was zu dem Sägezahnmuster führt. Wenn diskrete Variablen auf Ästhetiken wiecolour oder linetype abgebildet werden, werden sie automatisch als Gruppierungsvariablen verwendet. Wenn du jedoch andere Variablen für die Gruppierung verwenden möchtest (die nicht auf eine Ästhetik abgebildet sind), sollten sie mit group verwendet werden.

Hinweis

Wenn dein Liniendiagramm im Zweifelsfall falsch aussieht, versuche, die Gruppierungsvariable explizit mit group anzugeben. Bei Liniendiagrammen kommt es häufig zu Problemen, weil ggplot nicht weiß, wie die Variablen gruppiert werden sollen.

Wenn dein Diagramm neben den Linien auch Punkte enthält, kannst du den Eigenschaften der Punkte auch Variablen zuordnen, z. B. shape und fill (Abbildung 4-9):

ggplot(tg, aes(x = dose, y = length, shape = supp)) +
  geom_line() +
  geom_point(size = 4)  # Make the points a little larger

ggplot(tg, aes(x = dose, y = length, fill = supp)) +
  geom_line() +
  geom_point(size = 4, shape = 21)  # Also use a point with a color fill
Line graph with different shapes (left); With different colors (right)
Abbildung 4-9. Liniendiagramm mit verschiedenen Formen (links); Mit verschiedenen Farben (rechts)

Manchmal überschneiden sich die Punkte. In diesen Fällen solltest du ihnen ausweichen, was bedeutet, dass ihre Positionen nach links und rechts angepasst werden(Abbildung 4-10). Dabei musst du auch den Linien ausweichen, sonst bewegen sich nur die Punkte und sind falsch ausgerichtet. Du musst auch angeben, wie weit sie sich beim Ausweichen bewegen sollen:

ggplot(tg, aes(x = dose, y = length, shape = supp)) +
  geom_line(position = position_dodge(0.2)) +           # Dodge lines by 0.2
  geom_point(position = position_dodge(0.2), size = 4)  # Dodge points by 0.2
Dodging to avoid overlapping points
Abbildung 4-10. Abwedeln, um überlappende Punkte zu vermeiden

4.4 Ändern des Aussehens von Linien

Problem

Du möchtest das Aussehen der Linien in einem Liniendiagramm ändern.

Lösung

Der Linientyp (durchgezogen, gestrichelt, gepunktet usw.) wird mit linetype eingestellt, die Dicke (in mm) mit size und die Farbe der Linie mitcolour (oder color).

Diese Eigenschaften können (wie in Abbildung 4-11 gezeigt) eingestellt werden, indem sie beim Aufruf von geom_line() mit Werten versehen werden:

ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line(linetype = "dashed", size = 1, colour = "blue")
Line graph with custom linetype, size, and colour
Abbildung 4-11. Liniendiagramm mit benutzerdefiniertem Linientyp, Größe und Farbe

Wenn es mehr als eine Zeile gibt, wirkt sich die Einstellung der ästhetischen Eigenschaften auf alle Zeilen aus. Wenn du den Eigenschaften Variablen zuordnest, wie wir in Rezept 4.3 gesehen haben, wird jede Zeile anders aussehen. Die Standardfarben von sind nicht besonders ansprechend, daher solltest du eine andere Palette verwenden, wie in Abbildung 4-12 gezeigt, indem duscale_colour_brewer() oder scale_colour_manual() verwendest:

library(gcookbook)  # Load gcookbook for the tg data set

ggplot(tg, aes(x = dose, y = length, colour = supp)) +
  geom_line() +
  scale_colour_brewer(palette = "Set1")
Using a palette from RColorBrewer
Abbildung 4-12. Verwendung einer Palette aus RColorBrewer

Diskussion

Um eine einzige konstante Farbe für alle Linien festzulegen, gibst du colour außerhalb von aes() an. Das Gleiche gilt für Größe, Linientyp und Punktform(Abbildung 4-13). Eventuell musst du auch die Gruppierungsvariable angeben:

# If both lines have the same properties, you need to specify a variable to
# use for grouping
ggplot(tg, aes(x = dose, y = length, group = supp)) +
  geom_line(colour = "darkgreen", size = 1.5)

# Since supp is mapped to colour, it will automatically be used for grouping
ggplot(tg, aes(x = dose, y = length, colour = supp)) +
  geom_line(linetype = "dashed") +
  geom_point(shape = 22, size = 3, fill = "white")
Line graph with constant size and color (left); With `supp` mapped to `colour`, and with points added (right)
Abbildung 4-13. Liniendiagramm mit konstanter Größe und Farbe (links); Mit Supp, der Farbe zugeordnet und mit Punkten versehen (rechts)

Siehe auch

Weitere Informationen zur Verwendung von Farben findest du in Kapitel 12.

4.5 Ändern des Aussehens von Punkten

Problem

Du möchtest das Aussehen der Punkte in einem Liniendiagramm ändern.

Lösung

Setze in geom_point() die size, shape, colour, und/oder fillaußerhalb von aes() (das Ergebnis ist in Abbildung 4-14 dargestellt):

ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line() +
  geom_point(size = 4, shape = 22, colour = "darkred", fill = "pink")
Points with custom size, shape, color, and fill
Abbildung 4-14. Punkte mit benutzerdefinierter Größe, Form, Farbe und Füllung

Diskussion

Die Standardform für Punkte ist ein einfarbiger Kreis, die Standardgröße ist 2 und die Standardfarbe ist Schwarz. Die Füllfarbe ist nur für einige Punktformen (Nr. 21-25) relevant, die separate Umriss- und Füllfarben haben (siehe Rezept 5.3 für eine Tabelle der Formen). Die Füllfarbe ist normalerweise NA oder leer; du kannst sie mit Weiß füllen, um hohl aussehende Kreise zu erhalten, wie in Abbildung 4-15 gezeigt:

ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line() +
  geom_point(size = 4, shape = 21, fill = "white")
Points with a white fill
Abbildung 4-15. Punkte mit einer weißen Füllung

Wenn die Punkte und Linien unterschiedliche Farben haben, solltest du die Punkte nach den Linien angeben, damit sie oben gezeichnet werden. Andernfalls werden die Linien über den Punkten gezeichnet.

Für mehrere Linien haben wir in Rezept 4.3 gesehen, wie man unterschiedlich gefärbte Punkte für jede Gruppe zeichnen kann, indem man Variablen auf ästhetische Eigenschaften von Punkten innerhalb von aes() zuweist. Die Standardfarben sind nicht sehr ansprechend, daher möchtest du vielleicht eine andere Palette verwenden, indem du scale_colour_brewer()oder scale_colour_manual() benutzt. Wenn du eine konstante Form oder Größe für alle Punkte festlegen möchtest, wie in Abbildung 4-16, gibst du die Form oder Größe außerhalb von aes() an:

library(gcookbook)  # Load gcookbook for the tg data set

# Save the position_dodge specification because we'll use it multiple times
pd <- position_dodge(0.2)

ggplot(tg, aes(x = dose, y = length, fill = supp)) +
  geom_line(position = pd) +
  geom_point(shape = 21, size = 3, position = pd) +
  scale_fill_manual(values = c("black","white"))
Line graph with manually specified fills of black and white, and a slight dodge
Abbildung 4-16. Liniendiagramm mit manuell festgelegten Füllungen in Schwarz und Weiß und einem leichten Abwedeln

Siehe auch

Siehe Rezept 5.3 für mehr über die Verwendung verschiedener Formen und Kapitel 12 für mehr über Farben.

4.6 Erstellen eines Diagramms mit einem schattierten Bereich

Problem

Du möchtest ein Diagramm mit einem schattierten Bereich erstellen.

Lösung

Verwende geom_area() , um einen schattierten Bereich zu erhalten, wie in Abbildung 4-17:

# Convert the sunspot.year data set into a data frame for this example
sunspotyear <- data.frame(
    Year     = as.numeric(time(sunspot.year)),
    Sunspots = as.numeric(sunspot.year)
  )

ggplot(sunspotyear, aes(x = Year, y = Sunspots)) +
  geom_area()
Graph with a shaded area
Abbildung 4-17. Diagramm mit einem schattierten Bereich

Diskussion

Standardmäßig wird der Bereich mit einem sehr dunklen Grau gefüllt und hat keinen Umriss. Die Farbe kann durch die Einstellung fill geändert werden. Im folgenden Beispiel setzen wir sie auf "blue" und machen sie außerdem zu 80 % transparent, indem wir alpha auf 0,2 setzen. Dadurch werden die Rasterlinien durch den Bereich hindurch sichtbar, wie in Abbildung 4-18 dargestellt. Wir fügen auch eine Kontur hinzu, indem wir colour einstellen:

ggplot(sunspotyear, aes(x = Year, y = Sunspots)) +
  geom_area(colour = "black", fill = "blue", alpha = .2)
Graph with a semitransparent shaded area and an outline
Abbildung 4-18. Diagramm mit einem halbtransparenten schattierten Bereich und einer Umrisslinie

Es ist nicht unbedingt wünschenswert, dass einen Umriss um den gesamten Bereich hat, weil dadurch eine vertikale Linie am Anfang und am Ende des schattierten Bereichs sowie eine am unteren Rand entsteht. Um dieses Problem zu vermeiden, können wir den Bereich ohne Umriss zeichnen (indem wir nicht angeben colour) und dann einegeom_line() darüber legen, wie in Abbildung 4-19 gezeigt:

ggplot(sunspotyear, aes(x = Year, y = Sunspots)) +
  geom_area(fill = "blue", alpha = .2) +
  geom_line()
Line graph with a line just on top, using `geom_line()`
Abbildung 4-19. Liniendiagramm mit einer Linie ganz oben, mit geom_line()

Siehe auch

In Kapitel 12 erfährst du mehr über die Auswahl der Farben.

4.7 Ein gestapeltes Flächendiagramm erstellen

Problem

Du möchtest ein gestapeltes Flächendiagramm erstellen.

Lösung

Verwende geom_area() und ordne einen Faktor auf fill zu(Abbildung 4-20):

library(gcookbook) # Load gcookbook for the uspopage data set

ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup)) +
  geom_area()
Stacked area graph
Abbildung 4-20. Gestapeltes Flächendiagramm

Diskussion

Die Art von Daten, die mit einem gestapelten Flächendiagramm aufgezeichnet werden, werden oft in einem breiten Format bereitgestellt, aber ggplot erfordert Daten im langen Format. Um sie zu konvertieren, siehe Rezept 15.19.

In diesem Beispiel haben wir den Datensatz uspopage verwendet:

uspopage
#>     Year AgeGroup Thousands
#> 1   1900       <5      9181
#> 2   1900     5-14     16966
#> 3   1900    15-24     14951
#>  ...<818 more rows>...
#> 822 2002    45-54     40084
#> 823 2002    55-64     26602
#> 824 2002      >64     35602

In dieser Version des Diagramms(Abbildung 4-21) wird die Palette in eine Reihe von Blautönen geändert und es werden dünne (size = .2) Linien zwischen den einzelnen Bereichen hinzugefügt. Außerdem werden die gefüllten Bereiche halbtransparent (alpha = .4), so dass man die Gitterlinien durch sie hindurch sehen kann:

ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup)) +
  geom_area(colour = "black", size = .2, alpha = .4) +
  scale_fill_brewer(palette = "Blues")
Reversed legend order, lines, and a different palette
Abbildung 4-21. Umgekehrte Reihenfolge der Legende, Linien und eine andere Palette

Da jeder gefüllte Bereich mit einem Polygon gezeichnet wird, umfasst der Umriss die linke und rechte Seite. Das kann ablenkend oder irreführend sein. Um dies zu beseitigen(Abbildung 4-22), zeichnest du die gestapelten Bereiche zunächst ohne Umriss (indem du colour als Standardwert NA belässt) und fügst dann ein geom_line() hinzu:

ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup,
                     order = dplyr::desc(AgeGroup))) +
  geom_area(colour = NA, alpha = .4) +
  scale_fill_brewer(palette = "Blues") +
  geom_line(position = "stack", size = .2)
No lines on the left and right of the graph
Abbildung 4-22. Keine Linien auf der linken und rechten Seite des Diagramms

Siehe auch

In Rezept 15.19 erfährst du mehr über die Umwandlung von Daten vom Breit- in das Langformat.

In Kapitel 12 erfährst du mehr über die Auswahl von Farben.

4.8 Erstellen eines Diagramms mit gestapelten Proportionalflächen

Problem

Du möchtest ein gestapeltes Flächendiagramm erstellen, bei dem die Gesamthöhe auf einen konstanten Wert skaliert ist.

Lösung

Verwende geom_area(position = "fill"), wie in Abbildung 4-23, oben:

ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup)) +
  geom_area(position = "fill", colour = "black", size = .2, alpha = .4) +
  scale_fill_brewer(palette = "Blues")

Diskussion

Mit position="fill" werden die y-Werte so skaliert, dass sie von 0 bis 1 reichen. Um die Etiketten als Prozentsätze zu drucken, verwendescale_y_continuous(labels = scales::percent), wie in Abbildung 4-23, unten:

ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup)) +
  geom_area(position = "fill", colour = "black", size = .2, alpha = .4) +
  scale_fill_brewer(palette = "Blues") +
  scale_y_continuous(labels = scales::percent)
A proportional stacked area graph
Abbildung 4-23. Ein proportionales gestapeltes Flächendiagramm (oben); mit Prozentbeschriftungen auf der y-Achse (unten)

Siehe auch

Die Erstellung eines gestapelten Balkendiagramms erfolgt auf ähnliche Weise. In Rezept 3.8 erfährst du, wie du die Prozentsätze separat berechnest.

Für mehr über die Zusammenfassung von Daten nach Gruppen, siehe Rezept 15.17.

4.9 Hinzufügen einer Konfidenzregion

Problem

Du möchtest einen Vertrauensbereich zu einem Diagramm hinzufügen.

Lösung

Verwende geom_ribbon() und ordne die Werte ymin und ymax zu.

Im Datensatz climate ist Anomaly10y ein 10-Jahres-Durchschnitt der Abweichung (in Celsius) von der Durchschnittstemperatur 1950-1980, undUnc10y ist das 95%-Konfidenzintervall. Wir setzen ymax und ymin aufAnomaly10y plus oder minus Unc10y (Abbildung 4-24):

library(gcookbook) # Load gcookbook for the climate data set
library(dplyr)

# Grab a subset of the climate data
climate_mod <- climate %>%
  filter(Source == "Berkeley") %>%
  select(Year, Anomaly10y, Unc10y)

climate_mod
#>     Year Anomaly10y Unc10y
#> 1   1800     -0.435  0.505
#> 2   1801     -0.453  0.493
#> 3   1802     -0.460  0.486
#>  ...<199 more rows>...
#> 203 2002      0.856  0.028
#> 204 2003      0.869  0.028
#> 205 2004      0.884  0.029

# Shaded region
ggplot(climate_mod, aes(x = Year, y = Anomaly10y)) +
geom_ribbon(aes(ymin = Anomaly10y - Unc10y,
                ymax = Anomaly10y + Unc10y),
                alpha = 0.2) +
geom_line()
A line graph with a shaded confidence region
Abbildung 4-24. Ein Liniendiagramm mit einem schattierten Vertrauensbereich

Der schattierte Bereich ist eigentlich ein sehr dunkles Grau, aber er ist größtenteils transparent. Die Transparenz wird mit alpha = 0.2 eingestellt, wodurch sie zu 80% transparent wird.

Diskussion

Beachte, dass geom_ribbon() vor geom_line() steht, damit die Linie über dem schattierten Bereich gezeichnet wird. Wäre die Reihenfolge umgekehrt, könnte der schattierte Bereich die Linie verdecken. In diesem Fall wäre das kein Problem, da der schattierte Bereich größtenteils transparent ist, aber es wäre ein Problem, wenn der schattierte Bereich undurchsichtig wäre.

Anstelle eines schattierten Bereichs kannst du auch gepunktete Linien verwenden, um die Ober- und Untergrenzen darzustellen(Abbildung 4-25):

# With a dotted line for upper and lower bounds
ggplot(climate_mod, aes(x = Year, y = Anomaly10y)) +
  geom_line(aes(y = Anomaly10y - Unc10y), colour = "grey50",
              linetype = "dotted") +
  geom_line(aes(y = Anomaly10y + Unc10y), colour = "grey50",
              linetype = "dotted") +
  geom_line()
A line graph with dotted lines representing a confidence region
Abbildung 4-25. Ein Liniendiagramm mit gepunkteten Linien, die einen Vertrauensbereich darstellen

Schattierte Bereiche können andere Dinge als Vertrauensbereiche darstellen, z. B. die Differenz zwischen zwei Werten.

In den Flächendiagrammen in Rezept 4.7 geht dery-Bereich der schattierten Fläche von 0 bis y. Hier geht von yminbis ymax.

Get R Graphics Cookbook, 2. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.