N.B.: This is the last of learning a combination of rgl, plotly, and gganimate, as it becomes difficult to combine all these at this time.
Step 1: Install Required Packages
Before starting, ensure the following packages are installed:
install.packages(c("rgl", "ggplot2", "gganimate", "ggimage"))
Step 2: Generate 3D Frames Using rgl
1. Setup the Environment: Create a 3D scatter plot
that rotates over time.
library(rgl) # Create a 3D scatter plotn <- 100 # Number of pointsx <- rnorm(n)y <- rnorm(n)z <- rnorm(n)col <- rainbow(n) open3d() # Initialize the 3D plotplot3d(x, y, z, col = col, size = 5)
2. Rotate and Save Frames: Capture frames by
rotating the plot over time and saving each frame as an image.
frames_dir <- "frames"dir.create(frames_dir, showWarnings = FALSE) # Create a directory for frames # Generate and save framesfor (i in 1:100) { view3d(userMatrix = rotationMatrix(pi * i / 50, 0, 1, 0)) # Rotate around Y-axis snapshot3d(file.path(frames_dir, paste0("frame_", sprintf("%03d", i), ".png")))}
Step 3: Animate Frames Using gganimate
1. Prepare Frame Data: Load the saved frames and
prepare a data frame for animation.
library(ggplot2)library(gganimate)library(ggimage) # List saved framesframe_paths <- list.files(frames_dir, full.names = TRUE) # Create a data frameframe_df <- data.frame( frame = frame_paths, time = 1:length(frame_paths), # Time points for animation x = 0, # Placeholder for x-coordinate y = 0 # Placeholder for y-coordinate)
2. Build the Animation: Use gganimate to create the animation from
the frames.
animation <- ggplot(frame_df, aes(x = x, y = y, image = frame)) + geom_image(size = 1) + # Add images to the plot transition_time(time) + # Transition over the time variable enter_fade() + # Fade-in effect exit_fade() + # Fade-out effect theme_void() # Remove unnecessary plot elements
3. Save the Animation: Export the animation as a
GIF.
anim_save("3d_time_animation.gif", animation)
Step 4: Review and Debug
- Check the
saved animation in your working directory (
3d_time_animation.gif). - If the
animation doesn’t look smooth, adjust the number of frames or transition
settings.
Key Notes
- Custom Rotation: You can modify the
view3d()function to rotate around different axes or add zoom effects. - Image Quality: Ensure the
rglframes are saved with high resolution for better animation quality. - Animation Effects: Experiment with different
gganimateeffects likeease_aes()or transitions (transition_states()).





