Step 1: Install Required Libraries
Ensure you have the necessary libraries installed and loaded:
install.packages
("ggplot2")
install.packages
("gganimate")
install.packages
("plotly")
library
(ggplot2
)
library
(gganimate
)
library
(plotly
)
Step 2: Create an
Animated Plot with gganimate
We’ll first create a simple animated scatter plot showing the movement of
points over time.
- Prepare the Data:
# Sample data for animation
set.seed
(42)
data
<- data.frame
(
x
= rnorm
(50),
y
= rnorm
(50),
time
=
rep(1:5, each
=
10),
group
=
rep(letters[1:10], times
=
5)
)
- Create the Animated Plot:
# Animated scatter plot with gganimate
p
<- ggplot
(data
, aes
(x
= x
, y
= y
, color
= group
))
+
geom_point
(size
=
4)
+
labs
(title
=
'Time: {frame_time}', x
=
'X-Axis', y
=
'Y-Axis')
+
transition_time
(time
)
+
ease_aes
('linear')
# Save the animation
anim
<- animate
(p
, nframes
=
100, fps
=
10, renderer
= gifski_renderer
())
Step 3: Export Animation Frames
Convert the gganimate
frames into individual images that can be used in plotly
.
- Save Frames:
anim_save
("gganimate_frames.gif", animation
= anim
)
Alternatively, save the individual frames as PNG files:
frame_images
<- animate
(p
, nframes
=
100, fps
=
10, renderer
= file_renderer
(dir
=
"frames", prefix
=
"frame", overwrite
=
TRUE))
Step 4: Integrate with plotly
for Interactivity
- Load Images into
plotly
: Useplotly
to create an interactive slider for the frames.
library
(magick
)
# Load the GIF
frames_gif
<- image_read
("gganimate_frames.gif")
# Extract individual frames
frames_list <- lapply(seq_len(length(frames_gif)), function(i) {
frame <- image_write(frames_gif[i], format = "png") # Convert frame to PNG format
list(source = base64enc::dataURI(frame, mime = "image/png")) # Encode as Base64 URI
})
# Create the interactive plot
# Create the interactive plot using plotly plotly_animation <- plot_ly() %>% layout( sliders = list(list( steps = lapply(seq_along(frames_list), function(i) { list( method = "restyle", args = list("images[0].source", frames_list[[i]]$source), label = paste("Frame", i) ) }) )) ) # Add the initial image plotly_animation <- plotly_animation %>% add_image( source = frames_list[[1]]$source, x = 0, y = 0, xanchor = "center", yanchor = "middle" )
Step 5: Test the Integration
- Run the
above code to see your animated and interactive plot in the RStudio Viewer
or browser.
- Experiment
with the hover, zoom, and pan features provided by
plotly
.
Step 6: Reflect and Experiment
- Experiment
with more complex
gganimate
animations, such as usingtransition_states()
orview_follow()
. - Add custom
interactivity in
plotly
, such as hover text and annotations.