{ggindex} marks selected points of a ggplot2 plot with numbered
markers and explains the numbers in a legend, as on an annotated map.
Install the released version of {ggindex} from CRAN with:
install.packages("ggindex")You can install the development version of {ggindex} from
GitHub with:
# install.packages("pak")
pak::pak("discindo/ggindex")Map info to the description that goes in the legend. The entries are
numbered in the order they appear in the data; map label to choose the
numbers yourself.
library(ggplot2)
library(ggindex)
sites <- data.frame(
x = c(6, 7, 8, 9, 10),
y = c(6, 9, 7, 10, 8),
name = c("Library", "Main hall", "Sports centre", "Cafeteria", "Car park")
)
ggplot(sites, aes(x, y, info = name)) +
geom_focus() +
theme_minimal()geom_sf_focus() does the same on maps made with the sf package:
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
nc <- sf::st_transform(nc, 32119)
nc_large <- nc[nc$AREA > 0.2, ]
ggplot(nc) +
geom_sf(fill = "grey90", colour = "white") +
geom_sf_focus(aes(info = NAME), data = nc_large) +
scale_info_discrete("Largest counties") +
theme_void()Map focus to number only some observations, and draw the rest with
geom_point(). The markers take the standard colour, fill, shape
and size aesthetics, so regular ggplot2 scales apply. Here the most
efficient car of each cylinder class is numbered by its overall rank and
filled by class:
cars <- mtcars
cars$model <- rownames(cars)
cars$rank <- rank(-cars$mpg, ties.method = "first")
cars$best <- cars$mpg == ave(cars$mpg, cars$cyl, FUN = max)
ggplot(cars, aes(wt, mpg)) +
geom_point(colour = "grey60") +
geom_focus(aes(label = rank, focus = best, info = model, fill = factor(cyl))) +
scale_fill_brewer("Cylinders", palette = "Set2") +
scale_info_discrete("Best in class") +
labs(x = "Weight (1000 lbs)", y = "Miles per gallon") +
theme_minimal()Map label, focus and info in geom_focus() when the plot has
other layers: layers inherit the mapping of ggplot(), and their
observations would also appear in the legend.


