This week we are exploring Pokémon! This dataset is sourced from {pokemon} (CRAN | github), an R package which provides Pokémon information in both English and Brazilian Portuguese. I will only be looking at Gen 1 Pokémon.
TidyTuesday
Data Visualization
R Programming
2025
Author
Peter Gray
Published
March 30, 2025
(a) Thumbnail 1
(b) Thumbnail 2
Figure 1: Tidy Tuesday Week 13: Charts
1. R code
Show code
# Load the packages in ----------------------------------------------------if(!require(tidyverse)){install.packages("tidyverse"); library(tidyverse)}if(!require(patchwork)){install.packages("patchwork"); library(patchwork)}if(!require(ggplot2)){install.packages("ggplot2"); library(ggplot2)}if(!require(ggwordcloud)){install.packages("ggwordcloud"); library(ggwordcloud)}if(!require(ggpmisc)){install.packages("ggpmisc"); library(ggpmisc)}if(!require(ggimage)){install.packages("ggimage"); library(ggimage)}if(!require(ggtext)){install.packages("ggtext"); library(ggimage)}if(!require(rlist)){install.packages("rlist"); library(rlist)}# I stick all my styling into a CUsotm PAckage to tidy up my code and keep it consistent over the timeif(!require(CustomGGPlot2Theme)){devtools::install("CustomGGPlot2Theme"); library(CustomGGPlot2Theme)}# get the wd - force of habitwd<-getwd()#pulling images off internet was taking a lot of time and casing a time out erroroptions(timeout =1000)font<-"noto_mono"pokemon_df<-readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2025/2025-04-01/pokemon_df.csv')# I only care about first gen - Older Millenialfirst_gen<-pokemon_df%>%filter(generation_id==1)%>%#for laterrename("special attack"=special_attack)# going to loop through attack, defence, special attack, speedcolumns<-c("attack", "defense", "special attack", "speed")n=3#empty list of plotslist_of_plots<-list()for(nin1:length(columns)){data<-first_gen%>%group_by(type_1)%>%slice_max(order_by =.data[[columns[n]]], n =1, with_ties =FALSE)%>%ungroup()%>%arrange(.data[[columns[n]]])# Correct dynamic column referencing#Make labels with a picture of the Pokemon and then the name of the pokemon underneath# Generate labels after sortinglabels<-paste0("<img src='", data$url_image, "' width='45' height='35' /><br>","<span style='font-size:16px;'>", # Add font size styling heresapply(strwrap(str_to_title(data$pokemon), width =20, simplify =FALSE), function(x)paste(x, collapse ="<br>")),"</span>")chart<-data%>%ggplot(aes(x =reorder(pokemon, .data[[columns[n]]]), y =.data[[columns[n]]], fill =str_to_title(type_1)))+geom_bar(stat ="identity")+geom_text(aes(label =.data[[columns[n]]]), hjust =-0.5, position =position_dodge(width =0.25), size =6, family =font)+coord_flip()+labs(x ="Pokémon", y =paste0(str_to_title(columns[n]), " Score"), subtitle =str_to_title(columns[n]), fill ="Pokémon Type")+Custom_Style()+theme(axis.text.y =element_markdown(), legend.text =element_text(size =15), axis.text =element_text(size =12))+scale_x_discrete(labels =labels)list_of_plots<-list.append(list_of_plots, chart)}#single plot to look good for social mediasingle_chart<-list_of_plots[[1]]single_chart<-single_chart+labs( title ='Visualisation of various Pokémon stats by their Attack', subtitle ="TidyTuesday: Week 13, 2025", theme =Custom_Style())+theme( plot.subtitle =element_text(size =16))patchwork<-wrap_plots(list_of_plots)+plot_layout(guides ="collect")+plot_annotation( title =str_wrap('Visualisation of various Pokémon stats by their type', 80), subtitle ="TidyTuesday: Week 13, 2025", theme =Custom_Style())&theme( plot.title =element_text(size =24), plot.subtitle =element_text(size =16))