Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://dkibalnikov.github.io/donutsk/
Creating donut charts without a hassle
https://dkibalnikov.github.io/donutsk/
Last synced: about 2 hours ago
JSON representation
Creating donut charts without a hassle
- Host: GitHub
- URL: https://dkibalnikov.github.io/donutsk/
- Owner: dkibalnikov
- License: other
- Created: 2024-03-24T12:02:02.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-04-24T06:34:49.000Z (7 months ago)
- Last Synced: 2024-07-14T02:44:17.189Z (4 months ago)
- Language: R
- Homepage: https://dkibalnikov.github.io/donutsk/
- Size: 11.1 MB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.Rmd
- License: LICENSE
Awesome Lists containing this project
- awesome-ggplot2 - donutsk
README
---
output: github_document
---```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```[![R-CMD-check](https://github.com/dkibalnikov/donutsk/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/dkibalnikov/donutsk/actions/workflows/R-CMD-check.yaml)
[![Codecov test coverage](https://codecov.io/gh/dkibalnikov/donutsk/branch/main/graph/badge.svg)](https://app.codecov.io/gh/dkibalnikov/donutsk?branch=main)The Donutsk package allows you to build donut/pie charts with ggplot2 layer by layer, exploiting the advantages of polar symmetry. The package is designed to address the limitations of pie charts, which are well-known, while also capitalizing on their ability to effectively represent hierarchical data structures. The following features are worth to be highlighted:
- Create pie or donut charts while retaining ggplot2 flexibility, such as leveraging faceting and palettes, and fine-tuning appearance
- The layout functions help to streamline displaying text and labels *geoms* without overlapping effectively leveraging space available for pie and donut charts
- The `packing()` function arranges data to distribute small values further apart from each other
- The set of annotation functions utilizes layout functions to effectively distribute labels within the available space
- The label functions supports `glue::glue()` for convenient label construction like `Total: {.sum}`, where `.sum` is pre-calculated variable.## Installation
You can install the development version of donutsk from [GitHub](https://github.com/) with:
``` r
# install.packages("devtools")
devtools::install_github("dkibalnikov/donutsk")
```CRAN installation:
``` r
install.packages("donutsk")
```## Example
Basic example:
```{r example, fig.height=11, fig.width=11}
library(donutsk)# Create an example data set
n <- 40
set.seed(2021)
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(.9, .1))) |>
dplyr::mutate(highlight_int = dplyr::if_else(lvl1 == "A",TRUE,FALSE))# Doubled donut with advanced labeling
dplyr::group_by(df, lvl1, lvl2, highlight_ext, highlight_int) |>
dplyr::summarise(value = sum(value), .groups = "drop") |>
# Pack values effectively
packing(value, lvl1) |>
ggplot(aes(value = value, fill = lvl1)) +
# The donutsk visualization functions
geom_donut_int(aes(highlight = highlight_int), alpha=.5, r_int = .25) +
geom_label_int(aes(label = "Sum {fill}:\n{.sum} ({scales::percent(.prc)})"),
alpha = .6, col = "white", r=1.2) +
geom_donut_ext(aes(opacity = lvl2, highlight = highlight_ext)) +
geom_label_ext(aes(label = paste0(lvl2, ": {scales::percent(.prc_grp)}")),
show.legend = FALSE, col="white",
layout = tv(thinner = TRUE)) +
geom_pin(size=.5, linewidth=.1, show.legend = FALSE, cut = .25,
layout = tv(thinner = TRUE)) +
# Additional appearance settings
scale_fill_viridis_d(option = "inferno", begin = .1, end = .7) +
theme_void() +
theme(legend.position = "none") +
coord_polar(theta = "y")
```## Alternatives
There is a list of packages that can be considered as alternatives:
- [sunburstR](https://github.com/timelyportfolio/sunburstR/): Easily create interactive d3.js sequence sunburst charts in R, originally modeled on an example from Kerry Rodden. Additionally, sunburstR provides another version using d2b from Kevin Warne.
- [tastypie](https://github.com/PaoloDalena/tastypie/): Build pie charts with nice templates.
- [webr](https://github.com/cardiomoon/webr): Check the `PieDonut()` function.
- [ggpubr](https://github.com/kassambara/ggpubr/): The ‘ggpubr’ package provides easy-to-use functions for creating and customizing ‘ggplot2’-based publication-ready plots. Check `ggpubr::ggpie()` for details.## Considerations
The following list of ideas is considered as a kind of roadmap:
1. Integrate round annotations with [geomtextpath](https://allancameron.github.io/geomtextpath/) under the hood.
2. Expand the list of layouts with more sophisticated algorithms
3. Integrate pattern aesthetics with [ggpattern](https://coolbutuseless.github.io/package/ggpattern/index.html)
4. Calculate the precise square value for highlighted segments to adjust size