| donut_geom {donutsk} | R Documentation |
Create pie or donut chart
Description
Create pie or donut charts while retaining ggplot flexibility, such as leveraging faceting and palettes, and fine-tuning appearance
The function
geom_donut_int()creates visually internal donut layer as aggregation of passed valuesThe function
geom_donut_ext()creates visually external donut layer of passed values-
geom_donut_int0()andgeom_donut_ext()are generic geoms not supporting highlight feature
Usage
geom_donut_int0(
mapping = NULL,
data = NULL,
stat = "donut_int",
position = "identity",
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE,
r_int = 0,
r_ext = 1,
hl_shift = 0.1,
...
)
geom_donut_int(..., hl_col = "firebrick")
geom_donut_ext0(
mapping = NULL,
data = NULL,
stat = "donut_ext",
position = "identity",
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE,
r_int = 1.5,
r_ext = 2,
hl_shift = 0.1,
...
)
geom_donut_ext(..., hl_col = "firebrick")
Arguments
mapping |
Set of aesthetic mappings created by |
data |
The data to be displayed in this layer. There are three options: If A A |
stat |
The statistical transformation to use on the data for this
layer, either as a |
position |
Position adjustment, either as a string naming the adjustment
(e.g. |
na.rm |
If |
show.legend |
logical. Should this layer be included in the legends?
|
inherit.aes |
If |
r_int |
Internal donut radius |
r_ext |
External pie or donut radius |
hl_shift |
Sets the spacing to show highlighted segments |
... |
Other arguments passed on to |
hl_col |
Sets the color for highlighted segments. It's possible to use both simultaneously |
Format
An object of class StatDonutInt (inherits from Stat, ggproto, gg) of length 4.
An object of class StatDonutIntHl (inherits from Stat, ggproto, gg) of length 4.
An object of class StatDonutExt (inherits from Stat, ggproto, gg) of length 4.
An object of class StatDonutExtHl (inherits from Stat, ggproto, gg) of length 4.
Details
There are two additional aesthetics possible to use:
-
highlight- optional aesthetic which expects logical (TRUE/FALSE) variable in order to highlight particular donut segments -
opacity- operates pretty much the same asalphabut ensure more contrast colors and removes legend. Oncealphais setopacitydoes not affect a chart
Value
None
Examples
# Create an example
set.seed(1605)
n <- 20
df <- dplyr::tibble(
lvl1 = sample(LETTERS[1:5], n, TRUE),
lvl2 = sample(LETTERS[6:24], n, TRUE),
value = sample(1:20, n, TRUE),
highlight_ext = sample(c(FALSE,TRUE), n, TRUE, c(.7, .3))) |>
dplyr::mutate(highlight_int = ifelse(lvl1 == "A", TRUE, FALSE))
# Create a simple pie chart
ggplot(df, aes(value = value, fill=lvl1)) +
geom_donut_int(alpha=.6) +
coord_polar(theta = "y")
# Create a simple donut chart that can handle more granular data
# and highlight specific segments
ggplot(df, aes(value = value, fill=lvl2, highlight=highlight_ext)) +
geom_donut_int(r_int=.5, alpha=.6, linewidth=.2) +
coord_polar(theta = "y") +
xlim(0, 1.5)
# Perform data preparation tasks with `packing()`
# and apply specific color
packing(df, value) |>
ggplot(aes(value = value, fill=lvl2, highlight=highlight_ext)) +
geom_donut_int(r_int=.5, alpha=.6, linewidth=.2, col = "gray20") +
coord_polar(theta = "y") +
xlim(0, 1.5)
# Built combined donut chart with interanl and external layers
dplyr::bind_rows(
# arrange by value
`arrange()` = dplyr::arrange(df, lvl1, lvl2, value),
# pack values for better space management
`packing()` = packing(df, value, lvl1),
.id = "prep_type") |>
ggplot(aes(value = value, fill=lvl1)) +
geom_donut_int(aes(highlight=highlight_int), alpha=.6) +
geom_donut_ext(aes(opacity=lvl2, highlight=highlight_int)) +
# apply facets
facet_grid(~prep_type) +
# style chart with palette and theme
scale_fill_viridis_d(option = "inferno", begin = .1, end = .7) +
theme_void() +
coord_polar(theta = "y") +
xlim(0, 2.5)