Hover over the plot to identify the Pokémon.

library(plotly)
library(ggplot2)
library(pkmngor)
library(dplyr)
flee_vals <- sort(unique(pkmn$encounter.baseFleeRate))
cap_vals <- sort(unique(pkmn$encounter.baseCaptureRate))
cap_labs <- as.character(cap_vals)
cap_labs[c(1,2,4,6)] <- ""
p <- ggplot(pkmn, aes(x=encounter.baseCaptureRate, y=encounter.baseFleeRate, text=pokemonId)) +   geom_jitter(aes(col=type), width=0.015, height=0.002) +
  scale_y_continuous(breaks=flee_vals, limits=c(0,0.22)) + 
  scale_x_continuous(breaks=cap_vals, labels=cap_labs) + 
  annotate(geom="text", x=0.45, y=0.005, label="Excluded ABRA: baseCaptureRate=0.5, baseFleeRate=0.99") + 
  scale_color_manual(values=types$color)
ggplotly(p, tooltip=c("text", "x", "y"), width=720, height=720)

The capture rate and flee rates only take a small number of unique values. The plotted points are “jittered” around these values so they can all be seen. (Would be nice to not jitter if there is only one point, but not sure how to achieve this in ggplot2)

A nice idea for this plot might be to show the red to green color scale, as shown on the capture ring, but I don’t know how the exact color shade corresponds to the actual capture rate.

Note the actual chance of capturing the Pokémon when you land a throw depends not only on the base capture rate of the species, but on the Pokémon level, the accuracy of the throw, and whether a curve ball or a berry is used. See Gamepress for more info.