Since SVG is just a character string, you can set a different SVG for
every row of a data.frame, and then use this column as the
svg
aesthetic.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Read multiple SVG somehow
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
statue <- paste(readLines("https://www.svgrepo.com/download/227885/statue-of-liberty.svg"), collapse = "\n")
building <- paste(readLines("https://www.svgrepo.com/download/129010/bank-sign.svg") , collapse = "\n")
sign <- paste(readLines("https://www.svgrepo.com/download/118570/exit-sign.svg") , collapse = "\n")
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Define a data.frame mapping 'type' to actual 'svg'
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
icons_df <- data.frame(
type = c('statue', 'building', 'sign'),
svg = c( statue , building , sign ),
stringsAsFactors = FALSE
)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Create some Points-of-Interest and assign an svg to each
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
N <- 20
poi <- data.frame(
lat = runif(N),
lon = runif(N),
type = sample(c('statue', 'building', 'sign'), N, replace = TRUE),
stringsAsFactors = FALSE
)
poi <- merge(poi, icons_df)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# {ggsvg}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ggplot(poi) +
geom_point_svg(
aes(x = lon, y = lat, svg = I(svg)),
size = 10
) +
labs(
title = "{ggsvg} multiple SVG images"
) +
theme_bw()
Instead of adding each svg
to the poi
data.frame, map type
to the svg
aesthetic and
use a scale_svg_discrete_manual()
to map from
type
to the actual SVG.
ggplot(poi) +
geom_point_svg(
aes(x = lon, y = lat, svg = type),
size = 10
) +
scale_svg_discrete_manual(
aesthetics = 'svg',
values = c(statue = statue, building = building, sign = sign),
guide = guide_legend(override.aes = list(size = 5))
) +
labs(
title = "{ggsvg} multiple SVG images"
) +
theme_bw()