#' Isotype bars
#'
#' `geom_isotype_bar()` and `geom_isotype_col()` are equivalent to
#' [`geom_bar()`] and [`geom_col()`] but draw columns with unit images.
#' These two geoms are essentially identical to `geom_textured_bar()` and
#' `geom_textured_col()`, they just have slightly different default settings.
#' @inheritParams ggplot2::geom_bar
#' @inheritParams geom_textured_rect
#' @param img_height Height of the isotype image, in grid units. Should
#' be provided in `"native"` units, which are converted to data units.
#' If `NULL`, the image height is taken from the image width and the image
#' aspect ratio.
#' @param img_width Width of the isotype image, in grid units. Should
#' be provided in `"native"` units, which are converted to data units.
#' If `NULL`, the image width is taken from the image height and the image
#' aspect ratio.
#' @param ncol Number of image columns. If `NA`, is calculated based on the
#' data extent.
#' @param nrow Number of image rows. If `NA`, is calculated based on the
#' data extent.
#' @param interpolate A logical value indicating whether to linearly interpolate the image
#' (the alternative is to use nearest-neighbour interpolation, which gives a more blocky result).
#' @examples
#' library(ggplot2)
#' library(tibble)
#' library(magick)
#'
#' data <- tibble(
#' count = c(5, 3, 6),
#' animal = c("giraffe", "elephant", "horse"),
#' image = list(
#' image_read_svg("http://steveharoz.com/research/isotype/icons/giraffe.svg"),
#' image_read_svg("http://steveharoz.com/research/isotype/icons/elephant.svg"),
#' image_read_svg("http://steveharoz.com/research/isotype/icons/horse.svg")
#' )
#' )
#'
#' ggplot(data, aes(animal, count, image = image)) +
#' geom_isotype_col() +
#' theme_minimal()
#'
#' ggplot(data, aes(animal, count, image = image)) +
#' geom_isotype_col(
#' img_width = grid::unit(1, "native"), img_height = NULL,
#' ncol = NA, nrow = 1, hjust = 0, vjust = 0.5, fill = "#80808040"
#' ) +
#' coord_flip() +
#' theme_minimal()
#' @export
geom_isotype_bar <- function(mapping = NULL, data = NULL,
stat = "count", position = "stack",
...,
img_height = grid::unit(1, "native"),
img_width = NULL,
ncol = 1, nrow = NA,
interpolate = TRUE,
legend_key_params = NULL,
width = NULL,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE) {
layer(
data = data,
mapping = mapping,
stat = stat,
geom = GeomIsotypeBar,
position = position,
show.legend = show.legend,
inherit.aes = inherit.aes,
params = list(
width = width,
na.rm = na.rm,
img_height = img_height,
img_width = img_width,
ncol = ncol,
nrow = nrow,
interpolate = interpolate,
legend_key_params = legend_key_params,
...
)
)
}
#' @rdname geom_isotype_bar
#' @export
geom_isotype_col <- function(mapping = NULL, data = NULL,
stat = "identity", position = "stack",
...,
img_height = grid::unit(1, "native"),
img_width = NULL,
ncol = 1, nrow = NA,
interpolate = TRUE,
legend_key_params = NULL,
width = NULL,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE) {
layer(
data = data,
mapping = mapping,
stat = stat,
geom = GeomIsotypeCol,
position = position,
show.legend = show.legend,
inherit.aes = inherit.aes,
params = list(
width = width,
na.rm = na.rm,
img_height = img_height,
img_width = img_width,
ncol = ncol,
nrow = nrow,
interpolate = interpolate,
legend_key_params = legend_key_params,
...
)
)
}
#' @rdname geom_isotype_bar
#' @format NULL
#' @usage NULL
#' @export
#' @include geom-textured-bar.R
GeomIsotypeBar <- ggproto("GeomIsotypeBar", GeomTexturedBar,
default_aes = aes(
colour = NA, fill = NA, size = 0.5, linetype = 1, alpha = NA,
hjust = 0.5, vjust = 0
)
)
#' @rdname geom_isotype_bar
#' @format NULL
#' @usage NULL
#' @export
#' @include geom-textured-bar.R
GeomIsotypeCol <- ggproto("GeomIsotypeCol", GeomTexturedCol,
default_aes = aes(
colour = NA, fill = NA, size = 0.5, linetype = 1, alpha = NA,
hjust = 0.5, vjust = 0
)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.