Skip to content
discindoPublic

About

ggplot2 extension to plot a scatter with focus points

Topics

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Repository files navigation

ggindex

R-CMD-check Codecov test coverage

{ggindex} marks selected points of a ggplot2 plot with numbered markers and explains the numbers in a legend, as on an annotated map.

Installation

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")

Example

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.

About

ggplot2 extension to plot a scatter with focus points

Topics

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Contributors

Languages