gganimate

gganimate

Das R-Paket “gganimate” ist eine Erweiterung des beliebten R-Pakets “ggplot2”, mit dem animierte Grafiken und Diagramme in R erstellt werden können. Das Paket enthält eine Sammlung von Funktionen und Werkzeugen zur Erstellung verschiedener Arten von Animationen, wie z.B. Balkendiagramme, Flächendiagramme, Punktdiagramme und Liniendiagramme.

library(ggplot2)
library(gganimate)

gganimate

Key-Features sind:

  • easing
  • shadows
  • transitions
  • views

Installation

#devtools::install_github(‘thomasp85/gganimate’)
#install.packages(“gganimate”,repos = “http://cran.us.r-project.org”)

#install.packages("gganimate",repos = "http://cran.us.r-project.org")
#devtools::install_github('thomasp85/gganimate')

Verwendung von gganimate

Um eine animierte Grafik zu erstellen, müssen Sie zuerst eine ggplot2-Grafik erstellen und diese dann mit einer Animationsfunktion und Parametern versehen, um die Animation zu steuern.

Verwendung von gganimate

anim <- ggplot(mtcars, aes(mpg, disp)) +
geom_point(aes(color = gear)) +
transition_states(gear, transition_length = 2, state_length = 1) +
enter_fade() +
exit_fade()

animate(anim)

animate

Diese Funktion nimmt ein Gganim-Objekt und rendert es in eine Animation.

animate(plot, …)

animate-Parameter

  • plot, x: A gganim Objekt
  • nframes: Die Anzahl der zu rendernden Frames
  • fps: Die Framerate (frames/sec)
  • duration: Die Länge der Animation in Sekunden

animate-Parameter

  • detail: Die Anzahl der zusätzlichen Frames pro Frame
  • renderer: Die Funktion bestimmt wie die Grafiken gerendert werden sollen

animate-Parameter

  • device: Bestimmt das Format der Einzelframes. Möglich sind ‘png’, ‘ragg_png’ (ragg package), ‘jpeg’, ‘tiff’, ‘bmp’, ‘svg’, and ‘svglite’ (svglite package). (Standard -> ‘png’)
  • ref_frame: Der Frame der für die Festlegung der Dimensionen des Plots verwendet wird, z. B. der verfügbare Platz für einen Achsen-Text.

animate - Beispiel:

animate(anim, fps = 20, duration = 15)

anim <- ggplot(mtcars, aes(mpg, disp)) +
geom_point(aes(color = gear)) +
transition_states(gear, transition_length = 2, state_length = 1) +
enter_fade() +
exit_fade()
animate(anim, fps = 20, duration = 15)

anim_save

Diese Funktion ist analog zu ggplot2::ggsave() definiert, da sie standardmäßig die zuletzt erstellte Animation nimmt und sie an einem bestimmten Ort speichert. Da gganimate beliebige Renderer unterstützt, und somit auch Rückgabetypen unterstützt, muss das zurückgegebene Objekt eine save_animation-Methode implementieren.

anim_save(filename, animation = last_animation(), path = NULL, …)

anim_save-Parameter

  • filename: Gibt den Dateinamen an.
  • animation: Das zu speichernde Animationsobjekt, das von animate() zurückgegeben wird. Standardmäßig wird die letzte gerenderte Animation unter Verwendung von last_animation() verwendet.
  • path: Pfad des Verzeichnisses, in dem der Plot gespeichert werden soll: Pfad und Dateiname werden kombiniert, um den den voll qualifizierten Dateinamen. Standardmäßig wird das Arbeitsverzeichnis verwendet.

ease_aes

“easing” oder “tweening” bezieht sich auf die Interpolation von Animationen, um sie reibungsloser und realistischer zu gestalten. “gganimate” unterstützt mehrere Easing-Funktionen.

ease_aes(default = “linear”, …)

Easing-Funktionen

Folgende Easing-Funktionen sind in “gganimate” verfügbar:

  • linear: Dies ist die Standard-Easing-Funktion und bewegt Objekte mit einer konstanten Geschwindigkeit durch den Bildschirm.
  • quadratic: Dies ist eine Easing-Funktion, die Objekte am Anfang langsam starten lässt und dann beschleunigt.
  • cubic: Dies ist eine Easing-Funktion, die Objekte am Anfang sehr langsam starten lässt, dann beschleunigt und am Ende wieder verlangsamt.

Easing-Funktionen

  • quartic: Dies ist eine Easing-Funktion, die Objekte am Anfang sehr langsam starten lässt, dann beschleunigt, am Höhepunkt abrupt bremst und am Ende wieder verlangsamt.
  • quintic: Dies ist eine Easing-Funktion, die Objekte am Anfang sehr langsam starten lässt, dann beschleunigt, am Höhepunkt abrupt bremst und dann wieder beschleunigt.
  • sine: Dies ist eine Easing-Funktion, die Objekte in einer sinusförmigen Bewegung bewegt und ihnen damit eine natürlichere Bewegung verleiht.

Easing-Funktionen

  • exponential: Dies ist eine Easing-Funktion, die Objekte exponentiell beschleunigt, um ein Gefühl von zunehmender Geschwindigkeit zu vermitteln.
  • elastic: Dies ist eine Easing-Funktion, die Objekte mit einer elastischen Bewegung bewegt, die sich an das Ende der Bewegung anlehnt, um eine natürlichere Bewegung zu erzeugen.
  • back: Diese Easing-Funktion bewegt Objekte mit einer zurückprallenden Bewegung, ähnlich wie ein Ball, der auf den Boden fällt.
  • bounce: Diese Easing-Funktion bewegt Objekte mit einer hüpfenden Bewegung, ähnlich wie ein Ball, der auf den Boden fällt und mehrmals aufprallt, bevor er zur Ruhe kommt.

Easing-Modifikatoren:

  • in: Die Funktion wird so angewendet, wie sie ist.
  • out Die Funktion wird in umgekehrter Richtung angewandt
  • in-out: In der ersten Hälfte des Übergangs wird die Funktion unverändert angewandt, in der letzten Hälfte wird sie umgekehrt

Easing-Beispiel

anim <- ggplot(mtcars, aes(mpg, disp))  +
geom_point() +
transition_states(gear, transition_length = 2, state_length = 1) +
enter_fade() +
exit_fade()
anim1 <- anim +
ease_aes('cubic-in-out')

animate(anim1)

enter_exit

Definieren Sie, wie sich eingehende und ausgehende Daten verhalten.

frame_vars

Diese Funktion extrahiert die Metadaten, die während des Renderings zu jedem Frame erzeugt zerden. Sie entspricht den Informationen, die den Beschriftungen für die Interpretation von Zeichenketten zur Verfügung stehen, und ist daher abhängig vom Übergang und der für die Animation verwendeten Ansicht.

frame_vars(animation = last_animation())

renderers

Der Zweck der Renderer-Funktion ist es, eine Liste von Bilddateien entgegenzunehmen und sie zu einer Animation zusammenzusetzen. gganimate stellt eine Reihe von Renderern zur Verfügung, aber es ist auch möglich, eigene Renderer zu erstellen, falls die die mitgelieferten Renderer in irgendeiner Weise unzureichend sind.

renderers

  • gifski: Dies ist der Standard-Renderer in “gganimate”. Es erstellt animierte GIF-Dateien.
  • av: Dieser Renderer verwendet die “av”-Bibliothek, um animierte Videos in verschiedenen Formaten wie MP4, WebM und GIF zu erstellen..
  • magick: Dieser Renderer verwendet die “Magick”-Bibliothek, um animierte GIF-Dateien zu erstellen.

renderers

  • ffmpeg: Dieser Renderer verwendet die “ffmpeg”-Bibliothek, um animierte Videos in verschiedenen Formaten zu erstellen, einschließlich MP4, WebM und GIF.
  • sprite: Setzt magick voraus und rendert die Animation in ein Spritesheet.
  • file: Hat keine Abhängigkeiten und erstellt die Animation einfach als eine Liste von Bilddateiens

shadow_mark

p1 <- ggplot(airquality, aes(Day, Temp)) +
geom_line(color = 'red', size = 1) +
transition_time(Month) +
shadow_mark(colour = 'black', size = 0.75)
animate(p1)

shadow_null

Dies ist der Standardschatten, der nichts anderes anzeigt als die Daten des aktuellen Frames.

shadow_null()

shadow_trail

anim <- ggplot(airquality, aes(Day, Temp, colour = factor(Month))) +
geom_point() +
transition_time(Day) +
shadow_trail(max_frames = 10)
animate(anim)

shadow_wake

anim <- ggplot(iris, aes(Petal.Length, Sepal.Length)) +
geom_point() +
labs(title = "{closest_state}") +
transition_states(Species, transition_length = 4, state_length = 1) +
shadow_wake(wake_length = 0.05)
animate(anim)

split_animation

Manchmal ist es von Interesse, eine Animation in kleinere Teile aufzuteilen, damit sie orchestriert werden kann, z.B. in einer Präsentation.

split_animation(animation = last_animation(), by)

transition_components

Dieser Übergang ermöglicht es den einzelnen visuellen Komponenten, ihren eigenen “Lebenszyklus” zu definieren. D

transition_components(time, …)

transition_events

Dieser Übergang behandelt jedes visuelle Element als ein zeitliches Ereignis und ermöglicht es Ihnen, die Dauer und die Länge des Eintritts/Austritts für jedes Ereignis individuell zu steuern.

transition_events( start, end = NULL, range = NULL, enter_length = NULL, exit_length = NULL )

transition_filter

anim <- ggplot(iris, aes(Petal.Width, Petal.Length, colour = Species)) +
geom_point() +
transition_filter(transition_length = 2,filter_length = 1,Setosa = Species == 'setosa',Long =Petal.Length > 4,Wide = Petal.Width > 2) +
ggtitle('Filter: {closest_filter}',subtitle = '{closest_expression}') +
enter_fade() +
exit_fly(y_loc = 0)
animate(anim)

transition_layers

anim <- ggplot(mtcars, aes(mpg, disp)) +
geom_point() +
geom_smooth(colour = 'grey', se = FALSE) +
geom_smooth(aes(colour = factor(gear))) +
transition_layers(layer_length = 1, transition_length = 2) 

animate(anim)

transition_manual

Dieser Übergang ermöglicht es Ihnen, eine Variable in Ihren Daten einem bestimmten Frame in der Animation zuzuordnen.

transition_manual(frames, …, cumulative = FALSE)

transition_null

Alle Daten werden über die gesamte Animation über behalten.

transition_null()

transition_reveal

anim <- ggplot(airquality, aes(Day, Temp, group = Month)) +
geom_line() +
transition_reveal(Day)

animate(anim)

transition_states

anim <- ggplot(iris, aes(Sepal.Width, Petal.Width)) +
geom_point() +
labs(title = "{closest_state}") +
transition_states(Species, transition_length = 3, state_length = 1)

animate(anim)

transition_time

anim <- ggplot(airquality, aes(Day, Temp)) +
geom_point(aes(colour = factor(Month))) +
transition_time(Day)

animate(anim)

view_follow

anim <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_point() +
labs(title = "{closest_state}") +
transition_states(Species, transition_length = 4, state_length = 1) +
view_follow()

view_static

Bei dieser Ansicht bleiben die Positionsskalen über alle Bilder hinweg unverändert.

view_static()

view_step

anim <- ggplot(iris, aes(Petal.Length, Petal.Width)) +
geom_point() +
transition_states(Species, transition_length = 2, state_length = 1) +
view_step(pause_length = 2, step_length = 1, nsteps = 3)

animate(anim)

view_zoom

anim <- ggplot(iris, aes(Petal.Length, Petal.Width, colour = Species)) +
geom_point() +
transition_states(Species, transition_length = 2, state_length = 1) +
shadow_mark(past = TRUE, future = TRUE, colour = 'grey') +
view_zoom(pause_length = 1, step_length = 2, nsteps = 3)

animate(anim)