GitHub - corybrunson/ggalluvial at optimization (original) (raw)

ggalluvial

Travis build status CRAN_Status_Badge

This is a ggplot2 extension for alluvial diagrams.

Design

The alluvial plots implemented here can be used to visualize frequency distributions over time or frequency tables involving several categorical variables. The design is derived mostly from thealluvial package, but theggplot2 framework induced several conspicuous differences:

Installation

The latest stable release can be installed from CRAN:

install.packages("ggalluvial")

The cran branchwill contain the version most recently submitted toCRAN.

Development versions can be installed from GitHub:

remotes::install_github("corybrunson/ggalluvial", build_vignettes = TRUE)

The optimization branchcontains a development version with experimental functions to reduce the number or area of alluvial overlaps (see issue#6). Install it as follows:

remotes::install_github("corybrunson/ggalluvial", ref = "optimization")

Usage

Example

Here is how to generate an alluvial diagram representation of the multi-dimensional categorical dataset of passengers on the Titanic:

titanic_wide <- data.frame(Titanic) head(titanic_wide) #> Class Sex Age Survived Freq #> 1 1st Male Child No 0 #> 2 2nd Male Child No 0 #> 3 3rd Male Child No 35 #> 4 Crew Male Child No 0 #> 5 1st Female Child No 0 #> 6 2nd Female Child No 0 ggplot(data = titanic_wide, aes(axis1 = Class, axis2 = Sex, axis3 = Age, y = Freq)) + scale_x_discrete(limits = c("Class", "Sex", "Age"), expand = c(.1, .05)) + xlab("Demographic") + geom_alluvium(aes(fill = Survived)) + geom_stratum() + geom_text(stat = "stratum", label.strata = TRUE) + theme_minimal() + ggtitle("passengers on the maiden voyage of the Titanic", "stratified by demographics and survival")

The data is in “wide” format, but ggalluvial also recognizes data in “long” format and can convert between the two:

titanic_long <- to_lodes_form(data.frame(Titanic), key = "Demographic", axes = 1:3) head(titanic_long) #> Survived Freq alluvium Demographic stratum #> 1 No 0 1 Class 1st #> 2 No 0 2 Class 2nd #> 3 No 35 3 Class 3rd #> 4 No 0 4 Class Crew #> 5 No 0 5 Class 1st #> 6 No 0 6 Class 2nd ggplot(data = titanic_long, aes(x = Demographic, stratum = stratum, alluvium = alluvium, y = Freq, label = stratum)) + geom_alluvium(aes(fill = Survived)) + geom_stratum() + geom_text(stat = "stratum") + theme_minimal() + ggtitle("passengers on the maiden voyage of the Titanic", "stratified by demographics and survival")

Resources

For detailed discussion of the data formats recognized by ggalluvialand several examples that illustrate its flexibility and limitations, read the vignette:

vignette(topic = "ggalluvial", package = "ggalluvial")

The documentation contains several examples; use help() to call forth examples of any layer (stat_* or geom_*).

Feedback

Cite

If you use ggalluvial-generated figures in publication, i’d be grateful to hear about it! You can also cite the package according tocitation("ggalluvial").

Contribute

Issues and pull requests are more than welcome! Pretty much every fix and feature of this package derives from a problem or question posed by someone with datasets or design goals i hadn’t anticipated.